2011-01-17 16 views
1

Im TestFixtureTearDown-Teil eines NUnit-Tests versuche ich einige Test-Entities zu löschen, die im TestFixtureSetUp-Teil erstellt wurden. Ich verwende den folgenden CodeNHibernate löscht Entity nicht

 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(); 

jedoch nach dem Commit, die zwei Einheiten waren noch in der Datenbank. Nach der Suche auf mich auf this page auf SO kam und so habe ich:

 uow.Session.Flush(); 

jedoch nach wie vor die Einheiten in der DB bleiben. Hat jemand eine Idee, warum das so ist?

+0

Schwer zu sagen. Haben "g" und "k" einen Wert (ich habe vergessen, was NHibernate tut, wenn er versucht, null zu löschen)? Haben sie tatsächlich den Wert, den Sie erwarten? IIRC, Flush() leert nur Anweisungen und wird vor einem Commit automatisch von Commit() aufgerufen. –

Antwort

2

Ich habe noch nie die UOW-Klasse verwendet, die Sie verwenden, aber meine Projekte verwenden ISession.BeginTransaction und ISession.Transaction.Commit wie dies in einem Helfer implementiert:

public void Create (Aktion Logik ) {

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

}

Und dann:

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

Dies sollte funktionieren.

Ich möchte erwähnen, dass dies ein Beispiel ist, und Sie möchten einige Abstraktionen machen.

1

Wie werden die Repositories erstellt? Damit die Löschoperation erfolgreich ausgeführt werden kann, müssen die Objekte in dieselbe UoW (ISession) geladen werden, in der der Befehl Delete ausgegeben wird. Die Methode Delete macht die Objekte nicht dauerhaft und markiert sie zum Löschen.

Verwandte Themen