EF Core性能優化(一)


跟蹤查詢
  返回實體類型的查詢是默認會被跟蹤的。 這表示可以更改這些實體實例,然后通過 SaveChanges() 持久化這些更改。
非跟蹤查詢
  在只讀方案中使用結果時,非跟蹤查詢十分有用。 可以更快速地執行非跟蹤查詢,因為無需設置更改跟蹤信息。 如果不需要更新從數據庫中檢索到的實體,則應使用非跟蹤查詢。 可以將單個查詢替換為非跟蹤查詢。

具體詳情可查看微軟官方跟蹤與非跟蹤查詢

實體狀態由EntityState枚舉定義:Detached(未跟蹤)、Unchanged(未改變)、Added(已添加)、Deleted(已刪除)、Modified(已修改)

using System.Threading.Tasks;
using Core.Web.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace Core.Web.Controllers
{
    public class RegionController : Controller
    {
        private readonly DataContext _dataContext;
        public RegionController(DataContext dataContext)
        {
            _dataContext = dataContext;
        }
        //非跟蹤查詢
        public async Task<IActionResult> Index()
        {
            var regions = await _dataContext.Region.AsNoTracking().ToListAsync();
            return View(regions);
        }
        //非跟蹤增加
        public async Task<bool> Add(Region region)
        {
            region.RegionID = 11;
            region.RegionDescription = "青島";
            _dataContext.Entry(region).State = EntityState.Added;
            int res = await _dataContext.SaveChangesAsync();
            return res > 0;
        }
        //非跟蹤修改
        public async Task<bool> Edit(Region region)
        {
            region.RegionID = 11;
            region.RegionDescription = "菏澤";
            _dataContext.Entry(region).State = EntityState.Modified;
            int res = await _dataContext.SaveChangesAsync();
            return res > 0;
        }
        //非跟蹤刪除
        public async Task<bool> Del(Region region)
        {
            region.RegionID = 11;
            _dataContext.Entry(region).State = EntityState.Deleted;
            int res = await _dataContext.SaveChangesAsync();
            return res > 0;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM