本文主要是介绍EF获取非跟踪数据之DBSet.AsNoTracking(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、EF中用户查询非跟踪数据的方式是使用DBSet.AsNoTracking()
1.目前EF版本是6.0,生成的数据库实体模型都是DbSet<T>类型
2.默认情况下对于数据的访问都是启用模型跟踪
ctx.Configuration.AutoDetectChangesEnabled=true
自动调用DbContext.ChangeTracker.DetectChanges的方法:
DbSet.Find
DbSet.Local
DbSet.Remove
DbSet.Add
DbSet.Attach
DbContext.SaveChanges
DbContext.GetValidationErrors
DbContex.Entry
DbChangeTracker.Entries
3.如果对于不需要修改的数据可以使用AsNoTracking()方法
//// 摘要:// 表示针对 DbContext 的 LINQ to Entities 查询。//// 类型参数:// TResult:// 要查询的实体的类型。[SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification = "Name is intentional")]public class DbQuery<TResult> : IOrderedQueryable<TResult>, IQueryable<TResult>, IEnumerable<TResult>, IOrderedQueryable, IQueryable, IEnumerable, ......{//// 摘要:// 返回一个新查询,其中返回的实体将不会在 System.Data.Entity.DbContext 中进行缓存。//// 返回结果:// 应用了 NoTracking 的新查询。public virtual DbQuery<TResult> AsNoTracking();
//AsNoTracking 获取到的数据不能用作修改
using (MenuModel _Context = new MenuModel())
{Menu.Menu first = _Context.Menus.AsNoTracking().First();Console.WriteLine(first.MenuName);first.MenuName = "abc";first.Model.ModelName = "123";_Context.SaveChanges();Console.WriteLine(_Context.Menus.AsNoTracking().First().MenuName);
}
更多:
EF实体对象变动跟踪
EntiryFramework中事务操作实例
EntiryFramework中事务操作(三)事务回滚数据模型和数据库不对应问题
这篇关于EF获取非跟踪数据之DBSet.AsNoTracking()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!