NHibernate不会删除实体

时间:2011-01-17 09:23:14

标签: nhibernate fluent-nhibernate nunit

在NUnit测试的TestFixtureTearDown部分中,我尝试删除在TestFixtureSetUp-part中创建的一些测试实体。我使用以下代码

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

但是,在提交之后,这两个实体仍然在数据库中。在搜索之后,我在SO上遇到了this page,所以我补充道:

        uow.Session.Flush();

但是,实体仍保留在数据库中。有没有人知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

我从未使用过您正在使用的UoW类,但是我的项目是使用ISession.BeginTransaction和ISession.Transaction.Commit在这样的帮助器中实现的:

  

public void CreateContext(Action logic)   {

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

}

然后:

  

CreateContext(()=>   使用Session.delete(someObject));

这应该有用。

我想提一下这是一个例子,你想做一些抽象。

答案 1 :(得分:1)

如何创建存储库?为了使删除成功,必须在发出Delete命令的同一UoW(ISession)中加载对象。 Delete方法使对象非持久化并将其标记为删除。