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);
}
وثمة نهج آخر استخدام السياق.ObjectStateManager.ChangeObjectState.
لا تنتمي إلى StackOverflow