2013-03-13 27 views
5

Öğe nesnesini yükler ve sonra özelliklerden birini daha önce sahip olduğu değere atarsam, çerçeve değişiklikleri algılar mı, yoksa IsModified bayrağı doğru olarak ayarlanmış mıdır? Ben bu alan için ve bütün varlık için IsModified bayrağı set bu olayların hangi bilmiyorumVarlık çerçevesi, IsModified bayrağı belirlemek için atanan değerleri orijinal ile karşılaştırır mı?

OnNameChanging(value); 
ReportPropertyChanging("Name"); 
_Name = StructuralObject.SetValidValue(value); 
ReportPropertyChanged("Name"); 
OnNameChanged(); 

:

Bu gibi alan adı için oluşturulan kod böyle görünüyor.

+0

Sadece deneyin, yeterince hızlı bulacaksınız. –

cevap

3

Sizin içeriğiniz, verilerinizin farklı olup olmadığını değil, yalnızca değiştirilmiş olup olmadığını izler.

Böyle bir çek yapabilirsiniz: Şimdi bu şeyler gibi görünüyor https://stackoverflow.com/a/13515869/1339087

+1

Bana göre, "sadece veri değiştiyse, farklı değilse" anlamına gelir. Açıklar mısınız? – alpav

+2

yalnızca veriler değiştirildiyse, değer hiç değişmediyse, hatta orijinal değerine geri döndüğü anlamına gelir :) – Nikos

2

farklıdır (Ef6'yı):

private void CheckIfDifferent(DbEntityEntry entry) 
    { 
     if (entry.State != EntityState.Modified) 
      return; 

     if (entry.OriginalValues.PropertyNames.Any(propertyName => !entry.OriginalValues[propertyName].Equals(entry.CurrentValues[propertyName]))) 
      return; 

     (this.dbContext as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity).ChangeState(EntityState.Unchanged); 
    } 

kaynağı. "Yeni değer" in farklı olup olmadığını görmek için özellik değerlerini ayarlarken bir if ifadesi kullanmam gerekip gerekmediğini görmek için bunu araştırıyordum. Aşağıdaki ile test ettim ve varlık değiştirilmiş olarak işaretlenmemiş:

var things = dbContext.Things.AsQueryable(); 
var thing = things.First(); 
string name = thing.Name; 
thing.Name = name; 
var entry = dbContext.Entry(thing); 
var state = entry.State; 
int count = dbContext.ChangeTracker.Entries().Count(e => e.State == EntityState.Modified); 
var modified = entry.Property(x => x.Name).IsModified;