С 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();
}
}
}
Действительно ли откат необходим, когда все идет вбок? Мне любопытно, потому что в описании Commit сказано: "Выполняет транзакцию основного хранилища".
В то время как описание отката говорит: "Откат основной транзакции хранилища".
Мне это любопытно, потому что мне кажется, что если Commit не вызывается, ранее выполненные команды не будут сохранены (что кажется мне логичным). Но если это так, то зачем было бы называть функцию отката? В EF5 я использовал TransactionScope, у которого не было функции Rollback (только Complete), которая казалась мне логичной. Из-за причин MS DTC я больше не могу использовать TransactionScope, но я также не могу использовать попытку catch, как в примере выше (т.е. Мне нужен только Commit).