我使用 NHibernate 有一段时间了,发现下面的代码使用了 Transaction scope
。
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
// do work
}
}
}
我通常在不将代码包装到 TransactionScope
的情况下做所有事情,我是做错了什么还是只是错过了一些漂亮的功能?
最佳答案
用法是:交易。这是否是好处则更为复杂。有更直接的方式来实现事务——ADO.NET 事务。这些使用起来有点笨拙(您需要记住在每个命令上设置事务),但非常有效。
事务范围具有环境事务的优势;这使得它更容易使用。但是,它以不同的方式工作。特别是,事务范围支持多资源事务——这可能意味着多个数据库等。这通常是通过 DTC 完成的,但 DTC 有开销——它更昂贵(并且需要特定的防火墙配置等)。在许多单数据库情况下,它可以使用 LTM 而不是完整的 DTC 的捷径,但这仍然比 ADO.NET 事务更昂贵...只是不如 DTC .
一个强大的功能,但在使用之前确保您打算使用它;p
关于c# - TransactionScope 的好处/用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25725187/