2

これはサンプルコードです。私がいくつかのテストを行っている場所

  1. エンティティを取得する
  2. エンティティを削除する
  3. ロールバック トランザクション。
  4. エンティティの変更
  5. エンティティを更新
  6. エンティティを取得する

以下のコードの実行中にこの例外が発生しています:インスタンスは有効な状態ではありませんでした

        ISession session = sessionFactory.OpenSession();
        var list1 = session.Query<Asset>().ToList();

        ITransaction transaction = session.BeginTransaction();

        session.Delete(list1[0]);

        transaction.Rollback();
        transaction.Dispose();

        list1[0].Name = "Test";
        session.Refresh(list1[0]);
        var list2 = session.Query<Asset>().ToList();

リフレッシュを2回呼び出すと。問題はありません。それは正常に動作します。

        try
        {
            session.Refresh(list1[0]);
        }
        catch (Exception)
        {
            session.Refresh(list1[0]);
        }

ここで何が間違っているかというあなたの見解と提案について教えてください。

4

1 に答える 1

1

問題は、ロールバックと例外の処理にあると思います。ロールバックまたは例外の後、オブジェクトのメモリ内の状態は永続化された状態と一致しなくなる可能性が高いため、クリーンアップを行わないとセッションを安全に使用できなくなります。例外の後、トランザクションをロールバックしてから、セッションを破棄するか、session.Clear() を使用してクリアすることをお勧めします。同じことがロールバックにも当てはまります。新しいセッションを開始するか、セッションをクリアして既存のオブジェクトをすべて破棄する必要があります。そうしないと、矛盾が多くの問題を引き起こします。

于 2013-09-10T04:32:39.070 に答える