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(トランザクションスコープ部分で)のみがコミットされますかProperty1、それとも両方Property2がコミットされますか?

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 に答える