EF5 Como obter uma lista de propriedades de navegação para um objeto de domínio

Estou trabalhando em uma solução EF 5 Code-First e estou tentando atualizar uma entidade existente com uma modificada usando o padrão Repository:

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

Meu objeto de domínio simplificado se parece com isso:

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

O problema que tenho é que oCurrentValues.SetValues(modifiedEntity); O método parece estar atualizando apenas propriedades de tipo escalar e complexo, mas não propriedades de Navegação. Eu vi isso acontecendo com muitas pessoas e ainda não sei por que isso acontece. No entanto, eu descobri que se eu definir essas propriedades de navegação manualmente depois de executar o meuUpdateValues tudo funciona bem:

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

A questão é, desde que eu uso um repositório genérico: Como posso obter uma lista de propriedades de navegação no meu objeto de domínio? Talvez através de linq, reflection, ou de qualquer outra forma, então meu método de atualização em meu repositório pode passar por eles e configurá-los automaticamente?

Algo assim:

    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
        }

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion