2011-01-17 5 views
1

В TestFixtureTearDown-части теста NUnit я пытаюсь удалить некоторые тестовые объекты, созданные в части 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(); 

Однако после фиксации оба объекта все еще находились в базе данных. После поиска на I наткнулся this page на SO и поэтому я добавил:

 uow.Session.Flush(); 

Однако, до сих пор остаются в сущности в БД. Кто-нибудь есть идея, почему это так?

+0

Трудно сказать. do "g" и "k" имеют значение (я забыл, что NHibernate делает при попытке удалить null)? У них действительно есть ценность, которую вы ожидаете? IIRC, Flush() просто сбрасывает утверждения и автоматически вызывается перед фиксацией Commit(). –

ответ

2

Я никогда не использовал класс UOW вы используете, но мои проекты реализуются с использованием ISession.BeginTransaction и ISession.Transaction.Commit в качестве помощника, как это:

общественной ничтожной CreateContext (Action логика) {

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

}

И потом:

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

Это должно сработать.

Я хочу упомянуть, что это пример, и вы хотите сделать некоторые абстракции.

1

Как создаются репозитории? Для успешного удаления объект должен быть загружен в том же UoW (ISession), в котором выдается команда Delete. Метод Delete делает объекты непостоянными и маркирует их для удаления.

Смежные вопросы