Изменение состояния сущности в Entity Framework 4.1

Допустим, у нас есть объект Customer, у которого есть объект Order. Объект Order имеет объект OrderDetail.

Customer oCustomer 
using(var context = new MyContext)
{
oCustomer = context.Include("Order.OrderDetail").Find(1);
}
oCustomer.Name ="blah blah";
oCustomer.Order.Description = "blah blah";
oCustomer.Order.OrderDetail.Quantity = 10;

Теперь, когда я изменяю состояние Клиента следующим образом:

using(var context = new MyContext)
{
    context.Entry(oCustomer).State = EntityState.Modified.
    context.SaveChanges();
}

Это сохраняет только объект oCustomer, а не Order и OrderDetail, которые находятся в oCustomer. Поскольку context.Entry(oCustomer).State = EntityState.Modified изменяет только состояние oCustomer, а не Order и OrderDetail. В настоящее время я должен изменить состояние каждого объекта в ObjectGraph вручную, чтобы изменения были сохранены. Есть ли способ изменить состояние всего ObjectGraph, а не только родительского объекта? Есть ли какой-либо метод расширения или любой другой выход для этого?

1 ответ

Решение

Поскольку вы перерезаете связь между контекстом и сущностью, нет. Он не может автоматически знать, что все записи находятся в измененном состоянии.

Вы можете создать свой собственный метод расширения (или добавить его в свой класс контекста производного объекта), чтобы просмотреть все свойства и проверить, сопоставлены ли они в конфигурации, и, если это так, установить их на измененные.

Я предполагаю, что вы работаете в автономной среде, самый простой способ - это повторить все изменения, которые вы сделали в другом процессе. Снова загрузите сущность из БД, заполните свойства и вызовите изменения сохранения.

Другие вопросы по тегам