簡體   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