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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top