Varlık Çerçevesi - Kullanma İşlemleri veya SaveChanges(false) ve AcceptAllChanges()?
Ben soruşturma işlemleri ve görünen kendi başlarının çaresine bakıyorlar EF sürece geçtim false
SaveChanges()
ve Ara AcceptAllChanges()
varsa hata:
SaveChanges(false);
// ...
AcceptAllChanges();
Eğer bir şeyler kötü giderse? ben geri dönme ya, benim yöntem kapsam dışına çıkmaz, işlem sona gerekmiyor mu?
İşlem yarısına atanmış olan herhangi bir indentiy sütunlar ne oluyor? Eğer başka birisi benim kötü gitmeden önce benim sonra bir kayıt ilave edilirse, o zaman bu kayıp bir Kimlik değeri olacak sanırım.
Herhangi bir nedenle benim kod TransactionScope
standart sınıfı var mı acaba?
CEVAP
Varlık Çerçevesi ile zaman SaveChanges()
en yeterlidir. Bu işlem oluşturur, ya da herhangi bir ortam hareket kaydeder ve bu işlem için gerekli tüm çalışmaları yapar.
Bazen olsa SaveChanges(false) AcceptAllChanges()
eşleştirme yararlıdır.
Bunun için en kullanışlı yer iki farklı içerikler dağıtılmış bir işlem yapmak istediğiniz durumlar için uygundur.
I. e. böyle bir şey (kötü):
using (TransactionScope scope = new TransactionScope())
{
//Do something with context1
//Do something with context2
//Save and discard changes
context1.SaveChanges();
//Save and discard changes
context2.SaveChanges();
//if we get here things are looking good.
scope.Complete();
}
context1.SaveChanges()
context2.SaveChanges()
başarısız başarılı olursa, tüm dağıtılmış işlem iptal edildi. Ama ne yazık ki Varlık Çerçevesi zaten tekrar. bu yüzden context1
, üzerinde değişiklikler atılır veya etkili hatası günlüğü.
Ama eğer kodunuzu şöyle değiştirirseniz:
using (TransactionScope scope = new TransactionScope())
{
//Do something with context1
//Do something with context2
//Save Changes but don't discard yet
context1.SaveChanges(false);
//Save Changes but don't discard yet
context2.SaveChanges(false);
//if we get here things are looking good.
scope.Complete();
context1.AcceptAllChanges();
context2.AcceptAllChanges();
}
Süre çağrısı SaveChanges(false)
gönderir gerekli komutları için veritabanı, içerik kendisi değişmemiş, böylece tekrar gerekirse, ya da sen-ebilmek sorgulama ObjectStateManager
eğer istersen.
Bu işlem aslında, her bağlamlarını yeniden çalışırken veya günlük ya da devlet tarafından telafi edebilirsiniz iptal eder demektir ObjectStateManager
bir yere.
Daha fazlası için 18* blog post *bakın.
Doğrulama Sunucu Veritabanı Varlık Çer...
Varlık Çerçevesi: &; Store update, ıns...
Varlık Çerçevesi nesnelerin 1000'...
Diziler veya std::kullanma C , ne'...
Android parça sayısı: gizlemek kullanm...