Question

Vous cherchez à écrire un code de vérification générique sur ma sous-classe 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) Si je change seulement une propriété de référence, la valeur entry.State est "Inchangé".

2) Même si le point 1 a été réglé sur « modifié », la classe DbReferenceEntry ne semble pas avoir une propriété IsModified, ni une valeur d'origine.

Je suppose que cela est possible parce que EF doit être suivi de cette.

Quelqu'un peut-il aider?

Merci, Ben

Était-ce utile?

La solution

Oui Entrée de référence (propriété de navigation) ne suit pas les changements. Il est de la responsabilité de la propriété de clé étrangère (en cas d'association de clé étrangère) ou des changements de suivi des objets distincts d'association indépendante. Dans l'API ObjectContext vous pouvez obtenir ces objets par ObjectStateManager mais il semble que DbContext API ne dispose pas de cette disposition. J'ai posé une question à ce sujet sur .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top