Como garantir que os proxies sejam criados ao usar o padrão de repositório com a estrutura de entidade?

Eu tenho esse método na minha classe SurveyController:

public ActionResult AddProperties(int id, int[] propertyids, int page = 1)
{
    var survey = _uow.SurveyRepository.Find(id);
    if (propertyids == null)
        return GetPropertiesTable(survey, page);

    var repo = _uow.PropertySurveyRepository;

    propertyids.Select(propertyid => new PropertySurvey
                {
                    //Setting the Property rather than the PropertyID 
                    //prevents the error occurring later
                    //Property = _uow.PropertyRepository.Find(propertyid),
                    PropertyID = propertyid,
                    SurveyID = id
                })
                .ForEach(x => repo.InsertOrUpdate(x));
    _uow.Save();

    return GetPropertiesTable(survey, page);
}

O GetPropertiesTable exibe novamente as Propriedades, mas PropertySurvey.Property é marcado como virtual e eu criei a entidade usando o novo operador, portanto, um proxy para oferecer suporte a carregamento lento nunca foi criado e é nulo quando eu o acesso. Quando temos acesso direto ao DbContext, podemos usar o método Create paracrie explicitamente o proxy. Mas eu tenho uma unidade de trabalho e padrão de repositório aqui. Eu acho que poderia expor o contexto.Criar método através de um repositório.Criar método e, em seguida, preciso lembrar de usar isso em vez do novo operador quando eu adicionar uma entidade. Mas não seria melhor encapsular o problema no meu método InsertOrUpdate? Existe alguma maneira de detectar que a entidade que está sendo adicionada não é um proxy quando deveria ser e substituir um proxy? Este é o meu método InsertOrUpdate na minha classe de repositório base:

    protected virtual void InsertOrUpdate(T e, int id)
    {
        if (id == default(int))
        {
            // New entity
            context.Set<T>().Add(e);
        }
        else
        {
            // Existing entity
            context.Entry(e).State = EntityState.Modified;
        }
    }

questionAnswers(2)

yourAnswerToTheQuestion