Изменение состояния сущности в Entity Framework 4.1 - PullRequest
2 голосов
/ 10 августа 2011

Допустим, у нас есть объект 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;

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

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

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

1 Ответ

4 голосов
/ 10 августа 2011

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

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

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

...