2009-10-19 95 views
0

以下代码演示了一种误导性情况,即将数据提交到数据库的数据为 ,即使在事务中从不调用提交。NHibernate事务:为什么会导致提交的数据?

任何人都可以解释为什么?

[TestFixture] 
public class TestFixture 
{ 
     [Test] 
     public void Test() 
     { 
      var config = DoConfiguration(); 

      using(var factory = config.BuildSessionFactory()) 
      { 
       using (var session = factory.OpenSession()) 
       { 
        CallSessionContext.Bind(session); 

        using(new TransactionScope()) 
        { 
         using (session.BeginTransaction()) 
         { 
          var myEntity = session 
           .CreateQuery("from myEntity") 
           .List<MyEntity>()[0]; 

          myEntity.Name = "test name"; 
         } 

         var myEntity2 = session 
          .CreateQuery("from myEntity") 
          .List<MyEntity>()[0]; 

         myEntity2.Name = "test name"; 

         session.Flush(); 
        } 

        CallSessionContext.Unbind(factory); 
       } 
      } 
     } 
} 

回答

2

明确调用session.flush()是持续您的更改。在这里详细讨论post

+0

嗨,谢谢,所以我想问题是 - 是否有任何方式在相同的TransactionScope中运行两个NHibernate事务,而不杀死之间的TransactionScope? – cbp 2009-10-19 01:34:49

+0

我不够自信地说,但我会怀疑你应该用事务范围包装你的会话使用情况,而不是在事务范围之外声明的会话上创建nHibernate事务。 – cmsjr 2009-10-19 02:13:41

+0

也,也许检查了这一点 检查了这一点 http://ayende.com/Blog/archive/2006/06/04/NHibernateAndSystemTransactionsASuccess.aspx – cmsjr 2009-10-19 02:14:31

相关问题