最佳答案
有了 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 描述说: “提交底层存储事务。”
而 Rollback 描述说: “回滚基础存储事务。”
这让我很好奇,因为在我看来,如果不调用 Commit,以前执行的命令将不会被存储(这对我来说似乎是合乎逻辑的)。但是如果是这种情况,那么调用 Rollback 函数的原因是什么呢?在 EF5中,我使用了 TransactionScope,它没有回滚函数(只有一个完整函数) ,这对我来说似乎是合乎逻辑的。由于 MS DTC 的原因,我不能再使用 TransactionScope 了,但是我也不能像上面的例子那样使用 try catch (即,我只需要 Commit)。