Dzięki EF6 masz nową transakcję, której możesz użyć na przykład:
using (var context = new PostEntityContainer())
{
using (var dbcxtransaction = context.Database.BeginTransaction())
{
try
{
PostInformation NewPost = new PostInformation()
{
PostId = 101,
Content = "This is my first Post related to Entity Model",
Title = "Transaction in EF 6 beta"
};
context.Post_Details.Add(NewPost);
context.SaveChanges();
PostAdditionalInformation PostInformation = new PostAdditionalInformation()
{
PostId = (101),
PostName = "Working With Transaction in Entity Model 6 Beta Version"
};
context.PostAddtional_Details.Add(PostInformation);
context.SaveChanges();
dbcxtransaction.Commit();
}
catch
{
dbcxtransaction.Rollback();
}
}
}
Czy wycofywanie zmian jest rzeczywiście potrzebne, gdy sprawy idą bokiem? Jestem zaciekawiony, ponieważ opis zatwierdzenia mówi: „Zatwierdza podstawową transakcję sklepu”.
Natomiast opis wycofania mówi: „Wycofuje transakcję w sklepie bazowym”.
To mnie zaciekawia, ponieważ wydaje mi się, że jeśli Commit nie zostanie wywołane, wcześniej wykonane polecenia nie zostaną zapisane (co wydaje mi się logiczne). Ale jeśli tak jest, jaki byłby powód wywołania funkcji wycofywania zmian? W EF5 użyłem TransactionScope, który nie miał funkcji Rollback (tylko Complete), co wydawało mi się logiczne. Z powodów związanych z MS DTC nie mogę już korzystać z TransactionScope, ale nie mogę również używać try catch, jak na powyższym przykładzie (tj. Potrzebuję tylko Commit).