У меня есть модель Entity Framework 4.0, реализованная с использованием чистого POCO (без генерации кода, без самопроверкаемых сущностей, просто из старых старых объектов CLR).
Теперь вот код, который у меня есть в моем UI длявыполнить ОБНОВЛЕНИЕ:
[HttpPost]
public ActionResult UpdatePerson(Person person)
{
repository.Attach(person);
unitOfWork.Commit();
}
По сути, у меня есть метод действия, который принимает строго типизированный объект Person, и мне нужно ОБНОВИТЬ эту сущность.
не ошибка, но также не сохраняет изменения в БД.: (*
Когда я проверяю EntityState во время "Подтверждения" моей единицы работы:
var entities = ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged);
Я вижу свою сущность с EntityState.Без изменений .
Это объясняет, почему он не был сохранен. Мои операции поиска, добавления, удаления работают нормально (сохраняются правильно). Но UPDATE, похоже, не работает.
Я обнаружил, что некоторые потоки говорят, что мне нужно вручную установить состояние объекта:
ctx.ObjectStateManager.ChangeObjectState(person, EntityState.Modified);
Это правильно? Куда я поместил бы эту логику? Выставить в качестве операции на моем устройствеработы?
Очевидно, проблема в том, что у меня нет отслеживания изменений вообще, из-за использования Pure POCO (без создания EntityObject, без реализации INotifyPropertyChanging).
я не нашел проблемы с этим до сих пор.
Что я делаю не так?