使用NHibernate已有一段时间了,我现在正在学习实体框架。在NHibernate中,对于每个ISession实例,我使用ISession.BeginTransaction实例化单个数据库事务。在实体框架中,我如何在每个上下文中实现一个事务的相同效果?
答案 0 :(得分:0)
ISession并不严格对应于nHibernate中的数据库事务,但它确实有内置的隐式事务,您可以在此处看到更多信息:NHProf about implicit transactions。
在Entity Framework中,当您调用SaveChanges时,会隐式启动一个事务,您可以在this article on msdn
中阅读更多相关信息。要在Entity Framework中拥有显式事务,请在EntityConnection上使用TransactionScope或BeginTransaction。
最简单的方法是使用TransactionScope:
using (TransactionScope tran = new TransactionScope()){
context.SaveChanges();
//Do more work with this or another context
context.SaveChanges();
tran.Complete();
//Or alternatively don't call Complete and because of the using block Dispose on tran will be
//called causing an Rollback
}