我有两个实体有一对多的关系,这些是用户和地址。一个用户可以有很多地址。我为每个HTTP请求模式使用一个会话和事务,并启用了1级缓存。出于某种原因,我看到我的懒加载的集合没有处理对数据所做的更改。例如,如果我创建一个用户对象。然后,我创建了两个地址对象,做断言我期待用户对象延迟加载两个地址时节省他们像NHibernate缓存故障
User u1 = CreateNewUser("[email protected]", "[email protected]");
u1.Save();
Address a1 = CreateNewAddress(u1, "[email protected]", "Old1", "User1");
a1.Save();
Address a2 = CreateNewAddress(u1, "[email protected]", "Old1", "User1");
a2.Save();
Session.Flush();
Assert.AreEqual(2, u1.Addresses.Count); // THIS IS FAILING BECAUSE COUNT IS 0
现在和计数应该是2,但它返回0。如果我只是做扔掉完整缓存Session.Clear()调用也不起作用。但是,如果我通过执行Session.Clear()来抛弃完整缓存,然后以这种方式再次加载我的用户对象,它将按预期工作。我不知道我是否错过了一些东西,或者在NHibernate缓存设置配置中还是缺少一些东西。任何帮助将不胜感激。
感谢
嗯,我是新来的NHibernate但我认为这是假设由NHibernate的工作要做。我认为在同一个会话中,NHibernate会跟踪所有更改并通知相关的项目。情况并非如此。 – Leadfoot
呃...我假设你的User类有一个地址列表。如果您希望Count()为2,那么您需要添加到该列表中.NH不会为您执行此操作,除非您再次从DB重新加载对象。 – Todd