2015-09-15 18 views
7

Stumped - Entity Framework 7'ye yükseltiliyor ve değiştirilmeden önce tüm Değiştirilmiş Nesnelerin bir listesini alabilmek için genellikle DbContext içindeki SaveChanges'i geçersiz kılıyorum. Sonunda bir veritabanında önceki sürümü izleyen bir komut dosyası var. Varlık Çerçeve 6 ben şöyle modeli değişiklikleri alacağı: Ancak şimdi bu ObjectContext İdare Framework 7 içinde kaldırılırVarlık Çerçevesi İçerisinde Değiştirilmiş Nesnelerin Listesini Bulma 7

var oc = ((IObjectContextAdapter)this).ObjectContext; 
var modifiedItems = oc.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Deleted); 

List<ObjectStateEntry> ModifiedObjlist = modifiedItems.ToList(); 

, ben Entity Framework 7 içinde sıkışmış nasıl olacağını duyuyorum değiştirilmiş nesnelerin listesini almak?

+1

use context.ChangeTracker.Entries(). (X => x.State == ...) ' – dotctor

+1

@dotctor bu yanıtı kabul edebilmem için yanıt olarak ekle –

cevap

5

Bazı durumlarda çalışmayabilir DbContext.ChangeTracker

var modifiedEntries = context.ChangeTracker 
     .Entries() 
     .Where(x => x.State == EntityState.Modified) 
     .Select(x =>x.Entity) 
     .ToList(); 
+4

Nasıl Değiştirilir Özellikler ChangeTracker –

0

@dotctor 'ın kodu kullanabilirsiniz.

değişim izci bağlamında tarafından yönetilen varlıklar açısından son bilgiye sahip olmayabilir bazı durumlar vardır, bu yüzden bir varlık modifiye edilebilir eklendi// değişim izci farkında olmadan silindi. Bunu engellemek için, aşağıdaki koşullu içinde @dotctor 'ın kodunu kaydırmak olacaktır:

if(context.ChangeTracker.HasChanges()) 
{ 
    ... 
} 


Microsoft ChangeTracker.HasChanges Özeti():

Çekler herhangi bir yeni, sildiyseniz, veya değiştirilen varlıklar, DbContext.SaveChanges veya DbContext.SaveChangesAsync çağrılırsa, bu değişikliklerin veritabanına gönderileceği şekilde izlenir. ChangeTracker.AutoDetectChangesEnabled yanlış olarak ayarlanmadıkça bu yöntemin ChangeTracker.DetectChanges çağırdığını unutmayın.