簡體   English   中英

NHibernate事務未關閉

[英]NHibernate transactions not closing

出於對了解幕后情況的興趣,我正在運行一些測試方法,這些方法專門通過NHibernate將數據轉儲到數據庫中。 我正在使用各種映射設置,並且正在通過最新版本的NHProfiler觀看會話過程。

我注意到有些奇怪,可能並不在意,但以為我會檢查一下intertube:

[Test]
    public void Seed_Default_Users()
    {
        Role adminRole;
        var user = new User { UserName = "nkirkes", IsActive = true, Email = "nkirkes@dtsagile.com" };
        using (var sesh = _sessionFactory.OpenSession())
        {
            userRepo = new NHibernateRepository<User>(sesh);
            roleRepo = new NHibernateRepository<Role>(sesh);

            using (var tx = sesh.BeginTransaction())
            {
                // get the administrators role
                adminRole = roleRepo.Entities.FirstOrDefault(x => x.Name == "Administrator");
                tx.Commit();
            }

            // set up the object relationship from user -> role
            user.AddRole(adminRole);

            using (var tx = sesh.BeginTransaction())
            {
                // save it
                userRepo.Save(user);
                tx.Commit();
            }
        } 
    }

NHProf中的結果輸出為:

-- statement #1
begin transaction with isolation level: Unspecified

-- statement #2
select *
from   (SELECT this_.ROLE_ID as ROLE1_2_0_,
           this_.Name    as Name2_0_
    FROM   ROLES this_
    WHERE  this_.Name = 'Administrator' /* :p0 */)
where  rownum <= 1 /* :p1 */

就是這樣。 現在,插入實際上正在發生,但是NHProf僅顯示第一個事務和第一個選擇語句的初始打開。 我想念什么? 由於該方法實際上是有效的,因此我傾向於將其保留下來,但是我也擔心,如果NHProf沒有看到其余的語句,可能還有其他問題。

您可能需要調用ProfilerInfrastructure.FlushAllMessages(); 強制NHProf刷新其所有消息,以便您可以看到end transaction語句。 我在NUnit的[SetUpFixture]類的[TearDown]方法中調用此方法。

暫無
暫無

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

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