Как правильно обновить сущности в EF4, используя POCO и пользовательский ObjectContext? - PullRequest
1 голос
/ 21 декабря 2010

Используя описанную технику здесь У меня запущена и работает простая модель POCO EF4. Сохранить новое и удалить очень просто (используя AddObject() и DeleteObject() соответственно). Но единственный найденный мной способ обновления объектов - это извлечь сохраненную версию объекта и вручную обновить его свойства, добавив новые значения из сохраняемого объекта. Конечно, есть лучший способ?

Мой ObjectContext отключен - другими словами, я использую новый экземпляр ObjectContext для каждой операции в модели.

Спасибо.

1 Ответ

4 голосов
/ 21 декабря 2010

Используйте метод заглушки :

public void UpdateOrder(Order o)
{
   var stub = new Order { Id = o.OrderId }; // create stub with EntityKey
   ctx.Orders.Attach(stub); // attach stub to graph
   ctx.ApplyCurrentValues("Orders", o); // override stub with values.
   ctx.SaveChanges();
}

Если объект уже находится в графе, вы получите исключение OSM (объект с ключом уже существует).

Я противодействую этому, проверяя, существует ли сначала объект в графе (TryGetObjectStateEntry), и присоединяя его, только если его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...