2

ウィンドウアプリケーションでは、nHibernateを使用しています。テーブル(Tag1またはTag2)のデータを更新するときに問題が発生し、同じISessionで、Oracle Packageを使用してテーブルから別のテーブル(QAテーブル)にデータを挿入しています。コミット時に、OracleパッケージはTag1 / Tag2テーブルの変更されたデータを認識しないため、変更されたデータはQAテーブルで更新されません。同じセッションで呼び出されたためでしょうか?

    using (ISession session = iNhibernet.OpenSession())
            {

                using (ITransaction transaction = session.BeginTransaction())
                {

                    try
                    {
                        // Business Entity Saved in Tag1/Tag2 Table
                        session.SaveOrUpdate(l);
                    }
                    catch (Exception ex)
                    {
                        ErrorLogExceptionHandler.ErrorLog(ref ex);
                        throw new Exception("Unable to save data");
                    }
                    // Calling Oracle Package to Compare Tag1 and Tag2 data and inserting data in QA Table.
                    IDbCommand db = ProductionLog.ProductionLogUpdate(l.ProductionlogSeqNo, loadAction) as DbCommand;
                    db.Connection = session.Connection;
                    try
                    {
                        db.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        ErrorLogExceptionHandler.ErrorLog(ref ex);
                        throw new Exception("Unable to insert in production log");
                    }
                transaction.Commit();
       }
    }

助けてもらえますか。

ありがとう、

4

1 に答える 1

0

あなたが呼んでいる

                    session.SaveOrUpdate(l);

ただし、これにより、セッションがデータベースを即座に更新するように強制されることはありません。NHibernateは、保留中のすべての更新を保存し、それらを1つのバッチでデータベースに呼び出すことにより、データベースへの呼び出しを最小限に抑えます。SaveOrUpdate呼び出しは、次のまたはに変更を加えてデータベースを更新するようにセッションに指示してlFlushますCommit

oracleコマンドは、データがすでにデータベースに書き込まれていることを想定しています。

この問題は、への明示的な呼び出しで解決できると思いますFlush

            using (ITransaction transaction = session.BeginTransaction())
            {

                try
                {
                    // Business Entity Saved in Tag1/Tag2 Table
                    session.SaveOrUpdate(l);
                    session.Flush();  // <<== Write all of our changes so far
                }
                catch (Exception ex)
                {
                    ErrorLogExceptionHandler.ErrorLog(ref ex);
                    throw new Exception("Unable to save data");
                }
于 2012-07-27T00:26:35.993 に答える