2016-04-15 13 views
1

Varlıkları EF belleğe almak, değiştirmek ve kaydetmek istediğiniz bir tablo için birincil anahtar kimlikleri listesi var. Eğer Entity Framework, Önbellek kullanarak hala tek bir sorguda birden çok varlıkları tek bir sorguya yükleyin

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

entity.SomeColumn = "something"; 

dbContext.SaveChanges() 

Şu anda tek RTT değiştirilecek bütün varlıkları çekmek için böyle bir şey yapıyorum gibi bir şey yapacağını tek id ile

.

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

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

Soru varlık, EF benim db karşı gitmeden önce önbelleğe kontrol etmek bilecek kadar zeki mi? Örneğin, 1-4 numaralı varlıklar bağlama zaten eklenmişse, db sorgulaması yapılmamalıdır.

cevap

3

Kesin olarak değil. Her zaman veritabanını sorgulayacaktır.

dbContext.Entity.Local.Where(...

Bu veritabanı vurmak olmaz ama sadece daha önce yüklenmiş/önbelleğe alınan varlıkları döndürür: açık sorguya önbellek .local kullanmak gerekir.

Yararlı bilgiler: sorguları böyle bir Günlüğü işlevi tanımlayın görüntülemek için:

dbContext.Database.Log = Console.WriteLine;

+0

İlginç sayesinde; Kendi testlerimi yapmak için zamanım olmadı, bu yüzden gönderdim, ama sonra yapmayı planlıyorum. 'Yerel' özelliği kullanışlı görünüyor, ben birden çok kimlikleri alır ve ilk önce' Yerel' özelliği kontrol eder 'Entity.Find' için bir yardımcı işlevi yapacağız düşünüyorum. – Slight

İlgili konular