跟蹤查詢
返回實體類型的查詢是默認會被跟蹤的。 這表示可以更改這些實體實例,然后通過 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; } } }