Father father = BL.GetFatherById(1);
Product product = BL.GetByID(123);
(father.Products[553] == product)
product.delete = true;
father.Products[553].delete == false !!??
为什么?
他们没有连接?它是同一个对象。
答案 0 :(得分:3)
正如您可以阅读section 10.3 of the NHibernate reference manual 数据库标识和CLR对象标识在每个会话中是等效的。
因此Object.ReferenceEquals(foo, bar)
true
会产生foo
当且仅当bar
和==
附加到同一会话并映射到同一数据库行时。使用{{1}}比较对象标识时要小心 - 运算符可能已经过载(但通常应该知道)。
因此,只要您保持在同一会话中,无论您使用哪个查询对象,都应始终获取相同的对象。你在使用多个会话吗?也许是一个工作单元模式,你正在比较从不同工作单元返回的对象?
答案 1 :(得分:1)
首先,让我告诉你,你所做的是可怕的。这实际意味着什么
father.Products[553] == product;
除非你编写了一个自定义集合,我怀疑你做了,但是没有办法可行。
所以
看看这里怎么做(忽略实际问题)