在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();
但是,实体仍保留在数据库中。有没有人知道为什么会这样?
答案 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
方法使对象非持久化并将其标记为删除。