NHibernate中的对象身份问题是什么?

NHibernate中对象身份问题的含义是什么?

对象标识问题是没有完美的(也就是100%精确的)方法来确保普通CLR对象的对象标识与NHibernate中的对象标识的1:1映射。

原因是在一种情况下(CLR)中的对象标识由对象指针定义,在另一种情况下由对象标识由数据库ID值定义。

因此,可能无法完全可靠地将CLR对象映射到NHibernate对象。

BTW:这对NHibernate来说并不特别,但对任何对象关系映射器都适用。

对象标识问题涉及对象 – 关系不匹配以及对象之间的等价关系可以以不同方式定义的事实。

默认情况下,使用内存中的对象指针定义对象之间的等效性。 这意味着在两个不同的会话中使用相同PK加载的两个对象将被视为不同,这有点反直觉。

因此,使用PK来覆盖等价关系似乎很自然,这样可以使两个这样的两个对象被认为是等价的。 但是,你如何处理尚未保存但尚未分配PK的对象? 现在你可能会开始看到我们遇到的各种问题……

有关更多详细信息,您可以查看实现相等性的最佳实践 ,其中列出了与此问题相关的各种策略和陷阱。