2011-08-12 68 views
1

說我有以下代碼:實體框架對象什麼時候處理其數據?

using (var db = new MyDatabaseContext()) 
{ 
    foreach (var entity in db.LargeEntities) 
    { 
     byte[] data = entity.LargeBlob; 
     File.WriteAllBytes("c:\\" + entity.FileName); 
    } 
} 

當將爲每個entity.LargeBlob數據準備好垃圾收集?在循環中?使用說明後?我完成了WriteAllBytes行後面的對象,所以我希望儘快處理它。

回答

1

它已準備好在Using塊之後的gc。因爲EF保留已加載項目的本地副本,所以必須將Context配置爲釋放緩存項目。

+0

好了,爲了實現更早的配置,我必須首先獲取主鍵列表,然後用循環內的using語句遍歷它,對吧? – Nilzor

+0

@Nilzor:你可以加載實體而不用跟蹤。在EF 4.1中,這將是:'foreach(db.LargeEntities.AsNoTracking())中的var實體')。在這種情況下,EF不會在其上下文中緩存實體(至少如果您沒有在實體上加載延遲的屬性)。 – Slauma