Изменение состояния сущности в 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 ответ
Поскольку вы перерезаете связь между контекстом и сущностью, нет. Он не может автоматически знать, что все записи находятся в измененном состоянии.
Вы можете создать свой собственный метод расширения (или добавить его в свой класс контекста производного объекта), чтобы просмотреть все свойства и проверить, сопоставлены ли они в конфигурации, и, если это так, установить их на измененные.
Я предполагаю, что вы работаете в автономной среде, самый простой способ - это повторить все изменения, которые вы сделали в другом процессе. Снова загрузите сущность из БД, заполните свойства и вызовите изменения сохранения.