1

I was wondering if it's a good practice to nest two transactions? For example wrapping my NHibernate transaction with TransactionScope for the benefit of the Tests (making sure that the db rollbacks all the changes that were made in the test).

The other option is to keep the entities that I insert into the Db in memory and delete them at the end of the test.

Which one is better?

4

1 回答 1

1

首先,nhibernate 不支持嵌套事务!

如果已经打开了一个事务,另一侧的 TransactionScope 将不会创建新事务。如果您只使用事务范围,它将为连接创建一个新事务。

如果您随后在范围内打开事务,这仍然适用于 nhibernate。

回到您的问题,这在很大程度上取决于您在 TransactionScope 中创建的对象数量。如果它变得太多,您将简单地向数据库的事务日志发送垃圾邮件。除此之外,我会说这个概念非常好。

还有一件重要的事情要提到,如果您使用 TransactionScope,并且您使用 nhibernate 创建多个会话/事务,则范围可能会切换到需要 MSDTC 在目标服务器上运行的分布式事务,否则它将简单地失败。

于 2013-10-23T20:14:58.973 回答