我们计划在asp.net网络表单中开发一个新的应用程序。我们正在使用Entity Framework(使用POCO类方法)。
我们有Presentation层,业务逻辑层和数据访问层。我的问题是,如果在页面上我们想做一些交易工作,意味着向客户添加一些数据,添加一些与客户无关的其他数据,发送电子邮件等,那么我们如何在一次交易中完成。< / p>
要么我们应该在网页的代码背后开始交易?或者将这些所有数据传递给BLL中的某个客户方法,它会以事务方式完成所有这些操作吗?在这两种方式中,代码都不会松耦合。
当操作中涉及不同的实体时,是否可以让任何人知道进行交易工作的最佳做法?
答案 0 :(得分:1)
SaveChanges
使用内部交易,但如果您要执行多个SaveChanges
来电,则需要TransactionScope
。如果未调用scope.Complete()
(异常发生),则事务将获得回滚。
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
// add something to your context
myDbContext.Add(...);
// save changes
myDbContext.SaveChanges();
// commit changes
scope.Complete();
}