2017-09-27 10 views
1

NHibernateセッションでHQL文を実行する前にFlush()を呼び出す必要がありますか?NHibernate HQLを使用するときに明示的にフラッシュする必要があります

私は、が `HQLを扱っているときはいつでもFlushに十分スマートであるべきだと思います。それは読み取りデータに来るとき、あなたのFlushMode設定がデフォルトである、Autoであれば、クエリの結果は何と一致しているように、

例えば、

 using (ISession session) 
     { 
      var query = session.CreateQuery(
        $"DELETE FROM Table WHERE id = :id") 
       .SetParameter("id", someId); 

      session.Flush(); //is this necessary? 
      query.ExecuteUpdate(); 
      session.Clear(); //is this necessary? 
     } 

答えて

0

、その後、NHは、フラッシングを管理するために努力します現在セッション中です。

ただし、追加、更新、削除については明示的にすることが重要です。

using (ISession session) 
using (var transaction = session.BeginTransaction()) 
{ 
    var query = session.CreateQuery(
     $"DELETE FROM Table WHERE id = :id") 
      .SetParameter("id", someId); 

    query.ExecuteUpdate(); 

    transaction.Commit(); 
} 

データベースの整合性を提供しながら、トランザクションをコミットすることはあなたのためのフラッシュの世話をする:次のコードは、標準的な例です。

私はほとんどHQLを使用していないと言って、この回答に注意しなければならないので、私の答えはHQLとその動作に特に関係するものを見逃す可能性があります。

関連する問題