簡體   English   中英

NHibernate:單個會話上有多個事務

[英]NHibernate: Multiple Transactions on a single session

我想通過在單個會話上創建多個事務來了解是否存在任何問題,如下所示:

using (var session = factory.OpenSession())
{
    using (var trans1 = session.BeginTransaction())
    {
        .....
        trans1.commit();
    }

    using (var trans2 = session.BeginTransaction())
    {
        .....
        trans2.commit();
    }

    using (var trans3 = session.BeginTransaction())
    {
        .....
        trans3.commit();
    }

    using (var trans = session.BeginTransaction())
    {
        .....
        // trans1.commit();
    }
}

有可能嗎?是否必須為每個事務打開一個新的會話對象?

謝謝你的幫助。

是的,您所做的一切都很好。

nhibernate不支持多個嵌套事務。

即使在NHibernate中,在單個會話上進行多個事務也並不常見。 同樣根據個人經驗,我可以說在任何其他情況下重用會話不是一個好主意。

我建議保持工作流程盡可能簡單,以避免任何副作用:

  • 公開會議
  • 公開交易
  • 使用您的實體
  • 提交交易
  • 發生異常時回滾
  • 關閉/刷新會話(始終)

Web環境中最常見的策略是每個請求都具有會話。
當涉及事務時,實際上取決於您的用例。
您正在執行的操作很好,否則nhibernate不會將會話與事務分開。
但同樣,這取決於您的業務案例情況。

我建議您使用IDisposable包裝session.BeginTransaction() ,因此在Dispose請確保提交transaction。

沒問題,盡管很不尋常。 請記住,如果任何事務回滾,則應丟棄該會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM