我從NHibernate的背景下,以實體框架V4.0的到來。當我將實體加載到ObjectContext中時,只要ObjectContext存在('第一級緩存'),我希望它們可以在那裏被緩存。因此,如果第二次執行相同的查詢,則對象已經在ObjectContext中,不應再次加載。怪異的行爲
看一看這個查詢:
using (var context = new Model1Container()) {
//load entities from DB
var entities = context.Entity1Set.ToArray();
//entities should now be cached in the context (1st level cache)
//why does this call not use the cached items?
entities = context.Entity1Set.ToArray();
}
在SQL Server Profiler中,我可以清楚地看到,無論ToArray的()調用觸發數據庫查詢。爲什麼第二個查詢需要一個DB往返,而不是NHibernate的行爲?
謝謝!
同意的基礎上,具有與特定ID已在上下文中不需要另一輪訪問數據庫做我的經驗操作。一般操作,比如給我所有的東西都會去db。 – e36M3 2011-01-05 19:30:27
好吧,這並不奇怪,因爲如果你在'entities'數組上執行.Where()方法,你實際上使用LINQ到對象而不是LINQ to Entities。 不知LINQ到實體一般是能夠查詢緩存結果 – cheeesus 2011-01-05 20:09:20
另一件事:如果我們生活的ObjectContext這麼久,在數據庫中的數據可以在通話之間切換,我們可以使用ObjectContext.Refresh。 ObjectContext大多數時間很短,因此我們不關心數據庫在其生命週期中的更改 – cheeesus 2011-01-05 20:12:25