2011-01-17 14 views
1

NUnitテストのTestFixtureTearDown部分で、私はTestFixtureSetUp部分で作成されたいくつかのテストエンティティを削除しようとします。私は次のコードを使用しますNHibernateはエンティティを削除しません

 sessionFactory = NHibernateHelper.CreateSessionFactory(cssc["DefaultTestConnectionString"].ConnectionString); 
     uow = new NHibernateUnitOfWork(sessionFactory); 

     var g = reposGebruiker.GetByName(gebruiker.GebruikerNaam); 
     reposGebruiker.Delete(g); 

     var k = reposKlant.GetByName(klant.Naam); 
     reposKlant.Delete(k); 

     // Commit changes to persistant storage 
     uow.Commit(); 

ただし、コミット後、2つのエンティティはまだデータベースにありました。

 uow.Session.Flush(); 

はしかし、まだ実体はDBに残る:上の検索した後、私は私が追加SOなどにthis pageに出くわしましたなぜ誰がこのアイデアを持っていますか?

+0

伝えるのは難しいです。 "g"と "k"は値を持っていますか(NHibernateがnullを削除しようとしたときに忘れてしまったもの)?彼らは実際にあなたが期待する価値を持っていますか? IIRC、Flush()は単に文をフラッシュし、Commit()によってコミットの前に自動的に呼び出されます。 –

答えて

2

私はあなたが使用しているUOWクラスを使用したことがありませんが、私のプロジェクトは、このようなヘルパーにISession.BeginTransactionとISession.Transaction.Commitを使用して実装されています:

ます。public voidのCreateContext(アクション・ロジック) {

ISession.BeginTransaction(); 
    logic(); 
    ISession.Transaction.Commit(); 

}

そして:

CreateContext(()=> Session.Delete(someObject));

これは動作するはずです。

これは例であり、いくつかの抽象化を行いたいと言いたいと思います。

1

リポジトリはどのように作成されますか?削除が成功するには、オブジェクトがDeleteコマンドが発行された同じUoW(ISession)にロードされていなければなりません。 Deleteメソッドは、オブジェクトを非永続的にし、それらを削除のマークを付けます。

関連する問題