3

我有以下代码:

using (var session = SessionFactory.OpenSession())
{
  var entity = session.Get<Entity>(id);
  entity.Property1 = "new value";
  using (var tx = session.BeginTransaction())
  {
    entity.Property2 = "new value";
    tx.Commit();
  }
}

而现在,我很困惑,什么时候tx.Commit(),什么将提交给数据库?是只有Property2(在事务范围内)将被提交,还是两者都Property1Property2被提交?

4

2 回答 2

3

刷新会话时,您对持久对象所做的任何更改都将发送到数据库,并且提交事务将刷新会话。请注意,在某些情况下,会话可能会自动刷新,例如在使用数据库生成的标识符或发出查询时。

令人困惑的是,在 NHibernate 中,您可以拥有仅包含提交的事务块。为了可读性,我将其重写为:

using (var session = SessionFactory.OpenSession())
{
  using (var tx = session.BeginTransaction())
  {
      var entity = session.Get<Entity>(id);
      entity.Property1 = "new value";
      entity.Property2 = "new value";
      tx.Commit();
  }
}
于 2013-03-08T13:31:52.163 回答
0

实体的所有属性都将被提交。在您的配置中,您可以设置将 sql 输出到控制台的设置,您可以查看它在每次提交时发送的查询。

于 2013-03-08T07:05:32.947 回答