ObjectTrackingEnabled和linq-to-sql

fre*_*hie 6 c# linq-to-sql

在这里读到,在查询读取操作的数据时,设置ObjectTrackingEnabled为可以false提高性能.我的查询看起来像这样:

public return type TheQueryName (some parameters)
{
   using (TheDC MyDC = new TheDC())
   {
       var TheQuery = (...).ToList();

       return TheQuery;
   }
}
Run Code Online (Sandbox Code Playgroud)

1)如果我想添加性能增强,我只是在行ObjectTrackingEnabled = true;之前添加行var TheQuery = (...).ToList();

2)另外,如果我设置ObjectTrackingEnabledtrue在查询时,我需要在返回前将其设置为false,还是我只是设置ObjectTrackingEnabled了数据上下文的具体实例,下面的时间我会实例化一个新的数据上下文的值ObjectTrackingEnabled 将恢复到默认状态false

注意:我只计划添加ObjectTrackingEnabled = false;读取操作.

谢谢.

Dim*_*kov 9

ObjectTrackingEnabled控制您的数据上下文(TheDC在您的情况下)是否将在加载后跟踪实体的更改.您是否想要,取决于您的具体情况.

当然,在上述数据方面少做事情会让它走得更快,但在负担为代价的,你与跟踪更改.为什么变更跟踪很酷?因为你能:

  1. 从某些上下文中加载一些实体
  2. 修改它们
  3. 添加新的,删除其他人
  4. 调用SaveChanges并让数据上下文计算出对已修改实体执行UPDATE查询,对已删除实体执行DELETE等操作

禁用更改跟踪后,您必须明确告知上下文更改的内容,新值的内容等.

假设您仍然不希望对象跟踪,则在每个特定数据上下文实例上设置该属性.这意味着您必须:

  1. 为您创建的每个数据上下文手动设置它
  2. 在上下文的构造函数中将其设置为上下文的默认值,如下所示:this.Configuration.AutoDetectChangesEnabled = true;有关详细信息,请参阅此博客文章

希望这可以帮助!