博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF获取非跟踪数据之DBSet.AsNoTracking()
阅读量:4287 次
发布时间:2019-05-27

本文共 1394 字,大约阅读时间需要 4 分钟。

一、EF中用户查询非跟踪数据的方式是使用DBSet.AsNoTracking()

1.目前EF版本是6.0,生成的数据库实体模型都是DbSet<T>类型

2.默认情况下对于数据的访问都是启用模型跟踪

ctx.Configuration.AutoDetectChangesEnabled=true

自动调用DbContext.ChangeTracker.DetectChanges的方法:

DbSet.FindDbSet.LocalDbSet.RemoveDbSet.AddDbSet.AttachDbContext.SaveChangesDbContext.GetValidationErrorsDbContex.EntryDbChangeTracker.Entries

3.如果对于不需要修改的数据可以使用AsNoTracking()方法

//    // 摘要:    //     表示针对 DbContext 的 LINQ to Entities 查询。    //    // 类型参数:    //   TResult:    //     要查询的实体的类型。    [SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification = "Name is intentional")]    public class DbQuery
: IOrderedQueryable
, IQueryable
, IEnumerable
, IOrderedQueryable, IQueryable, IEnumerable, ...... { // // 摘要: // 返回一个新查询,其中返回的实体将不会在 System.Data.Entity.DbContext 中进行缓存。 // // 返回结果: // 应用了 NoTracking 的新查询。 public virtual DbQuery
AsNoTracking();

4.特别说明:对于使用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);}

更多:

你可能感兴趣的文章
python中eval函数和str函数
查看>>
python glob模块
查看>>
Ubuntu1604安装pycharm
查看>>
linux下python3 安装tkinter库
查看>>
python Tk()、Frame()、TopLevel()用法
查看>>
Python sys.argv[]详解
查看>>
Python sys.path、sys.modules模块介绍
查看>>
python元组遍历
查看>>
python字典用法总结
查看>>
python异常处理
查看>>
python sys.exc_info()详解
查看>>
python中os模块作用
查看>>
ubuntu python subprocess模块执行python脚本
查看>>
python xticks()函数设置X轴方法--刻度、标签
查看>>
HTTP协议原理
查看>>
Python核心模块——urllib模块
查看>>
Python中read()、readline()和readlines()三者间的区别和用法
查看>>
python正则表达式模块re
查看>>
python爬虫总结
查看>>
python网络编程基础--http
查看>>