为了账号安全,请及时绑定邮箱和手机立即绑定

.AsNoTracking()有什么区别?

.AsNoTracking()有什么区别?

九州编程 2019-10-15 14:30:18
我对.AsNoTracking()扩展名有疑问,因为这都是很新的,也很令人困惑。我正在为网站使用每个请求的上下文。我的许多实体都不会更改,因此不需要跟踪,但是在以下情况下,我不确定数据库的内容,甚至在这种情况下是否会有所不同。这个例子是我目前正在做的:context.Set<User>().AsNoTracking()// Step 1) Get usercontext.Set<User>()// Step 2) Update user与上面相同,但是.AsNoTracking()从步骤1中删除了:context.Set<User>();// Step 1) Get usercontext.Set<User>()// Step 2) Update user步骤1和步骤2使用相同的上下文,但发生在不同的时间。我无法解决的是是否有任何区别。由于第2步是更新,因此我猜两者都将两次访问数据库。谁能告诉我有什么区别?
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

参见本页实体框架和AsNoTracking


AsNoTracking会做什么

实体框架公开了许多性能调整选项,以帮助您优化应用程序的性能。这些调整选项之一是.AsNoTracking()。通过这种优化,您可以告诉您Entity Framework不要跟踪查询结果。这意味着Entity Framework不对查询返回的实体执行任何其他处理或存储。但是,这也意味着您必须先将这些实体重新附加到跟踪图上,才能更新它们。


使用AsNoTracking可以显着提高性能


查看完整回答
反对 回复 2019-10-15
?
守候你守候我

TA贡献1802条经验 获得超10个赞

没有跟踪LINQ到实体查询


当您的查询用于读取操作时,建议使用AsNoTracking()。在这些情况下,您可以取回您的实体,但是它们不会被您的上下文跟踪。这可以确保最少的内存使用和最佳性能


优点


与常规LINQ查询相比,性能得到了提高。

完全物化的对象。

使用编程语言内置的语法最简单地编写。

缺点


不适合CUD操作。

某些技术限制,例如:与Entity SQL中的简单OUTER JOIN语句相比,对OUTER JOIN查询使用DefaultIfEmpty的模式所导致的查询更为复杂。

您仍然不能将LIKE与常规模式匹配一起使用。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1486 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信