2013-03-13 8 views
5

Se carico l'oggetto entità e quindi assegno una delle proprietà allo stesso valore di prima, il framework rileva le modifiche o imposta il flag IsModified su true?Il framework di entità confronta i valori assegnati con l'originale per determinare il flag IsModified?

Questo è il modo in codice generato per il campo Nome assomiglia:

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

non so quale di questi eventi impostati bandiera IsModified per quel campo e per l'intera entità.

+0

Solo prova, lo scoprirai abbastanza veloce. –

risposta

3

Il contesto tiene traccia solo se i dati sono stati modificati, non se è diverso.

È possibile fare un controllo del genere:

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); 
    } 

fonte: https://stackoverflow.com/a/13515869/1339087

+1

Non mi è chiaro cosa significa "solo se i dati sono stati modificati, non se è diverso". Potrebbe chiarire. – alpav

+2

solo se i dati sono stati modificati significa che, se il valore è stato modificato, è tornato al suo valore originale :) – Nikos

2

Sembra che le cose ora sono diverse (EF6). Stavo cercando questo per vedere se avevo bisogno di usare un'istruzione if durante l'impostazione dei valori delle proprietà per vedere se il "nuovo valore" è diverso. Ho provato con il seguente e l'entità non è contrassegnato come modificato: