0

У меня большая проблема. Я использую Entity Framework 5 и шаблон UnitOfWork (используя репозитории). У меня есть объект сущности, человек (который наследует от лица и имеют некоторые свойства: имя, фамилия, IdAddress (и виртуальная сущность Адрес связан с idAddress)Entity Framework 5: commit не обновляет объект в памяти

Когда я использую следующий код:.

Person p = personRepository.FindById(5); 

я правильно получить объект, иностранный нормально, а также объекты, объявленные как виртуальные загружены

Однако, когда я использую следующий код:.

Person p = new Person(); 
p.IdAddress = 1; 
personRepository.Add(p); 
unitOfWork.commit(); 

объект p имеет нулевое значение для объекта Address. Как я могу «принудительно» обновить объект в памяти после совершения фиксации? Большое спасибо за вашу помощь

+0

(когда я пытаюсь извлечения, в другой момент, объект просто сохраняется с помощью FindById, адресная сущность правильно полученной) .. так что я хотел бы иметь обновления, после-упорствовать поведение – user2328912

ответ

3

Refresh Используйте метод ObjectContext:

context.Refresh(RefreshMode.StoreWins, p); 

Или, если вы используете DbContext:

context.Entry<Person>(p).Reload(); 
+0

я» я прочитал об этом подходе, но у меня есть 2 проблемы: 1) я не могу получить доступ к контексту: у меня есть видимость только в репозитории и объектах unitOfWork 2) вы уверены, что, «перезагружая» совокупность объектов, я что все составляющие его объекты обновляются каскадным способом? – user2328912

+0

@ user2328912: 1) вы можете изменить свой метод repository.Add, чтобы он перезагружал объект; 2) Я не уверен ни в чем, пока не попробовал это;) –

0

То, что сработало для меня был повторно инстанцировании хранилище прямо перед загрузкой страницы. Ваш код будет отличаться, но, тем не менее, вы генерируете данные в своем объекте personRepository из контекста Entity Framework, вам нужно делать это каждый раз, прежде чем модель будет отправлена ​​на представление.

public ActionResult Form(int id) 
    { 
     _repository = new EntityFrameworkRepository<Model>(new EntityContext(), "Id"); 
     return View(_repository.Where(c => c.Id == id).FirstOrDefault() == null ? new Model() : _repository.Where(c => c.Id == id).FirstOrDefault()); 
    } 
Смежные вопросы