[英]ObjectTrackingEnabled and linq-to-sql
我在这里读到,当查询数据以进行读取操作时,将ObjectTrackingEnabled
设置为false
会在某种程度上提高性能。 我的查询看起来像这样:
public return type TheQueryName (some parameters)
{
using (TheDC MyDC = new TheDC())
{
var TheQuery = (...).ToList();
return TheQuery;
}
}
1)如果我想添加性能增强,我只需添加ObjectTrackingEnabled = true;
就在行var TheQuery = (...).ToList();
之前的var TheQuery = (...).ToList();
2)另外,如果我在查询中将ObjectTrackingEnabled
设置为true
,我是否需要在返回之前将其设置为false,或者我只是为数据上下文的特定实例设置ObjectTrackingEnabled
以及下一次我将实例化一个新的数据上下文ObjectTrackingEnabled
的值将恢复为默认状态false
?
注意:我只计划添加ObjectTrackingEnabled = false;
阅读操作。
谢谢。
ObjectTrackingEnabled控制您的数据上下文(在您的情况下为TheDC
)是否将在加载后跟踪实体的更改。 您是否想要,取决于您的具体情况。
当然,在上述数据方面少做事情会让它走得更快,但在负担您提供跟踪变化的代价。 为什么变更跟踪很酷? 因为你能:
SaveChanges
并让数据上下文找出对修改后的实体进行UPDATE查询,对已删除的实体进行DELETE等操作 禁用更改跟踪后,您必须明确告知上下文更改的内容,新值的内容等。
假设您仍然不希望对象跟踪,则在每个特定数据上下文实例上设置该属性。 这意味着您必须:
this.Configuration.AutoDetectChangesEnabled = true;
有关详细信息,请参阅此博文 希望这可以帮助!
在参照:
1)如果我想添加性能增强,我只需添加ObjectTrackingEnabled = true; just before the line var TheQuery = (...).ToList();
ObjectTrackingEnabled = true; just before the line var TheQuery = (...).ToList();
查询性能增强来自NOT跟踪。 因此,您希望在为此目的创建新的datacontext之后立即在READ
查询上禁用此功能。
ObjectTrackingEnabled = FALSE
你的标签和主题行说“Linq2SQL”,但你的问题是关于Entity Framwork。
对于'传统'Linq2SQL,你需要这样:
linq2SqlDBContext.ObjectTrackingEnabled = false;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.