Domyślnie SaveChanges wykona w transakcji (patrz Remarks part w docs)
Jeśli chcesz mieć większą kontrolę nad transakcją, można owinąć SaveChanges zablokować w TransactionScope. SaveChanges następnie zbierze transakcję otoczenia i użyje tej.
Może to być przydatne, gdy chcesz rozproszoną transakcję (na przykład z wieloma kontekstami lub jeśli używasz WCF).
Jak wspomniano, które wykorzystują różne modele, należałoby użyć zarówno ObjectContexts ciągu TransactionScope (i używać some logic z AcceptAllChanges)
Twój kod będzie wtedy wyglądać tak:
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();
//If we get here it is save to accept all changes.
context1.AcceptAllChanges();
context2.AcceptAllChanges();
}
Yup Mam odpowiedź, dzięki :) –