EF4-会话之间未捕获的更改
-
22-09-2019 - |
题
我试图测试从一个上下文中分离一个实体,对它进行修改,创建一个新的上下文,附加它,并使会话之间所做的更改持续存在。我似乎无法得到这个工作适当。我试过调用DetectChanges以及ApplyCurrentValues w/没有成功。下面是我到目前为止得到的。这些不是POCO的,我不想这样对待它们。我只是希望能够分离实体,对其进行更改并重新附加它。谢谢!
OCConsumer consumer; using (var ctx1 = new CMSStagingContext()) { consumer = (from c in ctx1.OCConsumers select c).FirstOrDefault(); Console.WriteLine("Retrieved {0} - {1} {2}", consumer.CustomerId, consumer.FirstName, consumer.LastName); ctx1.Detach(consumer); } consumer.BirthDate = "10/22/1981"; using (var ctx2 = new CMSStagingContext()) { ctx2.Attach(consumer); ctx2.ApplyCurrentValues("OCConsumers", consumer); ctx2.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave | System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave); }
解决方案
当您将对象附加到上下文时,上下文将假定该对象是未修改的,除非您另有说明。最简单的方法是先将对象附加到上下文,然后修改它。所以你可以把你的代码改为:
OCConsumer consumer;
using (var ctx1 = new CMSStagingContext())
{
consumer = (from c in ctx1.OCConsumers
select c).FirstOrDefault();
Console.WriteLine("Retrieved {0} - {1} {2}",
consumer.CustomerId, consumer.FirstName, consumer.LastName);
ctx1.Detach(consumer);
}
using (var ctx2 = new CMSStagingContext())
{
ctx2.Attach(consumer);
consumer.BirthDate = "10/22/1981";
ctx2.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave | System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
}
不隶属于 StackOverflow