我使用NHibernate的3.1.0與MySql連接器6.3.5。作爲一般規則,我的存儲庫方法被包裝在一個NHibernate事務中。然而,調用存儲庫方法的服務或應用程序代碼也可能需要一個事務範圍 - 因此NHibernate事務與.NET的TransactionScope混合在一起。一個模擬測試是這樣的:與NHibernate的BeginTransaction()問題使用TransactionScope()
[Test]
public void CanPerformNestedSave()
{
using (var tx = new TransactionScope())
{
var user = new AdminUser { Email = "[email protected]", Name = "Test User 1", Password = "123" };
using (ISession session = OpenSession())
{
using (var tx = session.BeginTransaction())
{
entity.ModifiedAt = DateTime.Now;
session.SaveOrUpdate(entity);
tx.Commit();
return entity;
}
}
tx.Complete();
}
}
測試失敗,出現以下錯誤:
NHibernate.TransactionException:開始失敗,SQL例外 ----> System.InvalidOperationException:嵌套事務未支持的。
我已經搜遍網絡找到這個場景的解決方案,並希望社區在StackOverflow可以提供幫助。
感謝Lulian(下)。最後,我決定實現我自己的工作單元模式,利用NHibernate session.BeginTransaction來管理它。 – Dion 2011-06-10 08:31:31