-1

アップデート

NHibernate の最初のキャッシュからインスタンスが削除されたかどうかを調べたい

private static void Evict()
        {
            using (var session = sessionFactory.OpenSession())
            using (var transaction = session.BeginTransaction())
            {
                var customers = session.Query<Customer>().ToList();

                var customer = customers[0];
                session.Delete(customer);
                transaction.Commit();

              //how to find out whether or not customers[0] is still in session.
            }

        }
4

2 に答える 2

0

意味あり。var customer = customers[0]; と言うと、顧客のコピーを変数に設定しています。変数が設定された後に削除しています。ステートメント:

Console.WriteLine(customers[0].CustomerName);

キャッシュを使用していません - 変数値を使用しています。

于 2012-05-09T06:57:54.027 に答える
0

セッションの実装を「ハッキング」してみることができます。

var sessionImpl = (ISessionImplementor)session;
var sessionContext = sessionImpl.PersistenceContext;  
var entry = sessionContext.GetEntry(customer);
if (entry.Status == Status.Deleted)
{
  Console.WriteLine("Customer {0} is deleted", customer.Name);
}

正直に言うと、私はこれを自分でやったわけではありませんが、私が見る限り、うまくいくはずです。セッションの実装とコンテキストをいじらないでください。このクラスに書き込むと、すべてが壊れる可能性があります。

もう 1 つのより複雑ではあるが「ハック」ではないアプローチは、削除ハンドラーを登録することです。問題は、a) データベースでエンティティが削除されたとき (たとえば、セッションがフラッシュされたとき) に実行され、b) セッション ファクトリの構成時に登録する必要があるため、実装が難しくなることです。

于 2012-05-10T06:56:42.390 に答える