Как обеспечить создание прокси при использовании шаблона репозитория с платформой сущностей?
У меня есть этот метод в моем классе 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);
}
GetPropertiesTable отображает свойства, но PropertySurvey.Property помечается как виртуальный, и я создал объект с помощью оператора new, поэтому прокси-сервер для поддержки отложенной загрузки никогда не создавался, и при обращении к нему он становится пустым. Когда у нас есть доступ напрямую к DbContext, мы можем использовать метод Create дляявно создать прокси, Но у меня есть единица работы и шаблон хранилища. Я думаю, что я мог бы представить метод context.Create через метод repository.Create, и затем мне нужно помнить, чтобы использовать это вместо оператора new, когда я добавляю сущность. Но не лучше ли заключить проблему в мой метод InsertOrUpdate? Есть ли какой-нибудь способ обнаружить, что добавляемый объект не является прокси, когда он должен быть, и заменить прокси? Это мой метод InsertOrUpdate в моем базовом классе репозитория:
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;
}
}