我读到here在查询数据以执行读取操作时,将ObjectTrackingEnabled
设置为false
会在一定程度上提高性能。我的问题是这样的:
public return type TheQueryName (some parameters)
{
using (TheDC MyDC = new TheDC())
{
var TheQuery = (...).ToList();
return TheQuery;
}
}
1)如果我想添加性能增强,我是否只在
ObjectTrackingEnabled = true;
行之前添加var TheQuery = (...).ToList();
行?2)另外,如果我在查询中将
ObjectTrackingEnabled
设置为true
,那么在返回之前是否需要将其设置为false,或者我只是为数据上下文的特定实例设置ObjectTrackingEnabled
,然后我将实例化一个新的数据上下文,ObjectTrackingEnabled
的值将恢复为其默认状态false
?注意:我只计划添加
ObjectTrackingEnabled = false;
来读取操作。谢谢。
最佳答案
objecttrackingenabled控制数据上下文(TheDC
在您的情况下)是否在加载实体后跟踪它们的更改。你要不要看你的具体情况。
当然,让数据上下文做更少的事情会使它运行得更快,但代价是让您承担跟踪更改的负担。为什么更改跟踪很酷?因为你可以:
从某个上下文加载一些实体
修改它们
添加新的,删除其他
调用SaveChanges
并让数据上下文计算出对修改的实体执行更新查询,对删除的实体执行删除等操作
禁用更改跟踪后,必须明确告诉上下文更改了什么、新值是什么等等。
假设您仍然不需要对象跟踪,则在每个特定的数据上下文实例上设置该属性。这意味着你必须:
为您创建的每个数据上下文手动设置
在上下文的构造函数中将其设置为上下文的默认值,如下所示:this.Configuration.AutoDetectChangesEnabled = true;
有关详细信息,请参见this blog post。
希望这有帮助!