我正在使用Fluent NHibernate映射ProductCategory树,一切都很顺利,直到我尝试走完从数据库返回的树,以确保它正确地保存和检索。
以下是我的测试方法:
测试失败,因为孩子是SameAs啤酒。这意味着它实际上并没有从数据库加载对象,因为它仍然在某个地方的NHibernate会话中。
非常感谢任何见解。
编辑:回应Sean的评论如下。我正在使用内存中的SQLite数据库,因此只要会话/连接关闭,数据库就会被吹走。
答案 0 :(得分:1)
刚想出来,原来这是一个复制和粘贴错误。嘿,PEBKAC。
我添加了4个断言来验证对象不在会话中:
Assert.That(Session.Contains(_beveragesCategory), Is.False);
Assert.That(Session.Contains(_beerCategory), Is.False);
Assert.That(Session.Contains(_darkBeerCategory), Is.False);
Assert.That(Session.Contains(_lightBeerCategory), Is.False);
当所有这些都通过时(我第一次运行它们),我仔细研究了断言对象不同的代码,发现断言是错误的。
当时:
Assert.That(_beverageCategory.ChildCategories[0], Is.Not.SameAs(_beerCategory));
应该是:
Assert.That(fromDB.ChildCategories[0], Is.Not.SameAs(_beerCategory));
答案 1 :(得分:0)
从测试的角度来看,最好关闭用于创建对象的初始会话,并创建一个新会话来检索对象。这将确保再次命中数据库以实例化对象(假设未启用第二级缓存)。