Entity Framework rilevamento delle modifiche API e le voci di riferimento
-
26-10-2019 - |
Domanda
In cerca di scrivere il codice di verifica generica sul mio sottoclasse DbContext.
foreach (var entry in this.ChangeTracker.Entries<MyClass>())
{
if (entry.State == EntityState.Modified)
{
var entityProperties = entry.Entity.GetType().GetProperties();
foreach (var entityProperty in entityProperties)
{
DbMemberEntry propertyEntry = entry.Member(property.Name);
if (propertyEntry is DbPropertyEntry)
{
// IsModified available
}
else if (propertyEntry is DbReferenceEntry)
{
// IsModified not available
}
}
}
}
1) Se cambio solo una proprietà di riferimento, il valore entry.State è "Invariato".
2) Anche se il punto 1 è stato impostato su "modifica", la classe DbReferenceEntry non sembra avere una proprietà IsModified, né un valore originario.
Presumo che ciò è possibile perché EF deve essere monitoraggio questo.
Chiunque può aiutare?
Grazie, Ben
Soluzione
Si voce di riferimento (proprietà di navigazione) non tiene modifiche. E 'responsabilità della proprietà estera chiave (in caso di associazione chiave esterna) o separati modifiche oggetto di monitoraggio di associazione indipendente. In ObjectContext API è possibile ottenere questi oggetti di ObjectStateManager
ma sembra DbContext API non ha questa disposizione. Ho fatto una domanda su questo su MSDN Forum .