2010-10-15 53 views
10

如果我有一個實體框架4的背景,通常如果我遇到喜歡的查詢:實體框架4 - 防止基本緩存

db.Invoices.Where(I => whatever); 

再後來跑別的東西:

db.Invoices.Where(I => something_else); 

任何從第二個查詢返回的對象也從第一個返回,不會從數據庫加載。英孚只會採取它已經擁有的對象。

問題,關閉此功能的最佳方法是什麼?我可以告訴EF從數據庫中加載它所需的每個對象嗎?

謝謝!

回答

9

您需要更改實體的MergeOption設置,例如,

db.Invoices.MergeOption = MergeOption.OverwriteChanges; 

OverwriteChanges意味着對象始終從數據源加載。您還可以使用NoTracking完全禁用跟蹤,如果您不需要更新數據或重新使用查詢,這可以提高性能。默認值爲AppendOnly,它具有您觀察到的行爲。