2016-04-15 58 views
1

我有一個表的主鍵ID列表,這些表的實體我想要拉入EF內存,修改並保存。實體框架,在單個查詢中通過主鍵加載多個實體,同時仍在使用緩存

有了一個ID,你會做這樣的事情

var entity = dbContext.Entity.Find(id); 

entity.SomeColumn = "something"; 

dbContext.SaveChanges() 

目前我正在做這樣的事情拉在同一個RTT要修改的實體。

int[] ids = new int[] { 1, 2, 3, 4 }; 

Entity[] entities = dbContext.Entity 
    .Where(c => ids.Contains(c.PrimaryKey)) 
    .ToArray(); 

問題是,是英孚智能足以知道檢查緩存之前,對我的數據庫?例如,如果實體1-4已經連接到上下文,則不應該創建數據庫查詢。

回答

3

不隱含。

Where()將始終查詢數據庫。要明確的查詢緩存,你需要使用。當地

dbContext.Entity.Local.Where(...

這不會碰到數據庫,但它只會返回已緩存/加載之前的實體。

好消息:查看查詢定義這樣的日誌功能:

dbContext.Database.Log = Console.WriteLine;

+0

有趣的感謝;沒有時間做我自己的測試,所以我發佈了,但我打算做一些。 'Local'屬性似乎很有用,我想我會做一個類似於Entity.Find的輔助函數,它接受多個ID並首先檢查Local'屬性。 – Slight