繁体   English   中英

ObjectTrackingEnabled和linq-to-sql

[英]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 )是否将在加载后跟踪实体的更改。 您是否想要,取决于您的具体情况。

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

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

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

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

  1. 为您创建的每个数据上下文手动设置它
  2. 将它设置为上下文构造函数中的上下文的默认值,如下所示: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM