跟踪查询
返回实体类型的查询是默认会被跟踪的。 这表示可以更改这些实体实例,然后通过 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; } } }