实体框架与NHibernate中的事务

时间:2012-02-08 07:53:50

标签: entity-framework nhibernate

使用NHibernate已有一段时间了,我现在正在学习实体框架。在NHibernate中,对于每个ISession实例,我使用ISession.BeginTransaction实例化单个数据库事务。在实体框架中,我如何在每个上下文中实现一个事务的相同效果?

1 个答案:

答案 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
}