З EF6 у вас є нова транзакція, яку можна використовувати, як:
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();
}
}
}
Чи потрібен відкат насправді, коли справа йде боком? Мені цікаво, оскільки в описі коміту сказано: "Фіксує базову транзакцію магазину".
Тоді як в описі відкоту сказано: "Відкочує базову транзакцію магазину".
Це мене цікавить, бо мені здається, що якщо коміт не буде викликаний, то попередньо виконані команди не будуть зберігатися (що мені здається логічним). Але якщо це так, яка причина буде викликати функцію відкоту? У EF5 я використовував TransactionScope, який не мав функції відкату (лише Complete), що мені здавалося логічним. Через причини MS DTC я більше не можу використовувати TransactionScope, але я також не можу використовувати спробний улов, як у прикладі вище (тобто, мені потрібен лише коміт).