EF5 So rufen Sie eine Liste der Navigationseigenschaften für ein Domänenobjekt ab

Ich arbeite an einer EF 5 Code-First-Lösung und versuche, eine vorhandene Entität mithilfe des Repository-Musters durch eine geänderte zu aktualisieren:

    public void UpdateValues(T originalEntity, T modifiedEntity)
    {
        _uow.Context.Entry(originalEntity).CurrentValues.SetValues(modifiedEntity);

Mein vereinfachtes Domain-Objekt sieht folgendermaßen aus:

public class PolicyInformation : DomainObject
{
     //Non-navigation properties
     public string Description {get;set;}
     public bool Reinsurance {get;set;}
     ...
     //Navigation properties
     LookupListItemFormType FormType {get;set;}
     ...
}

Das Problem, das ich habe, ist dasCurrentValues.SetValues(modifiedEntity); Diese Methode scheint nur skalare und komplexe Typeneigenschaften zu aktualisieren, aber keine Navigationseigenschaften. Ich habe das bei vielen Leuten gesehen und weiß immer noch nicht, warum das so ist. Ich habe jedoch herausgefunden, dass, wenn ich diese Navigationseigenschaften nach der Ausführung von my manuell einstelleUpdateValues alles funktioniert gut:

            _policyInfoRepo.UpdateValues(existingPolicyInfo, info);
            existingPolicyInfo.FormType = info.FormType;

Die Frage ist, da ich ein generisches Repository verwende: Wie kann ich eine Liste der Navigationseigenschaften in meinem Domänenobjekt abrufen? Vielleicht über linq, reflection oder auf andere Weise, damit meine Aktualisierungsmethode in meinem Repository sie durchlaufen und automatisch einstellen kann?

Etwas wie das:

    public void UpdateValues(T originalEntity, T modifiedEntity)
    {
        //Set non-nav props
        _uow.Context.Entry(originalEntity).CurrentValues.SetValues(modifiedEntity);
        //Set nav props
        var navProps = GetNavigationProperties(originalEntity);
        foreach(var navProp in navProps)
        {
           //Set originalEntity prop value to modifiedEntity value
        }

Vielen Dank!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage