我在NHibernate用户Google网上论坛上问了同样的问题,有人认为他们已经找到了根本原因(并且还提出了解决方案):
https://groups.google.com/forum/#!topic/nhusers/BZoBoyWQEvs
问题代码在PropertyPath.Equals(PropertyPath)中,该属性试图仅通过使用哈希码来确定相等性。这对于较小的代码库来说效果很好,因为默认的Object.GetHashCode()返回一个顺序的对象索引。但是,在垃圾回收之后,这些索引会在删除最终对象并创建新对象时重新使用…这导致多个对象获得相同的哈希码…一旦启动垃圾回收,属性路径就有机会共享相同的哈希码,这意味着它们最终将为冲突的属性混合其定制器,从而导致错误的列名…
如果要解决此错误,可以修补NH源代码:
如果您拥有自己的NH源副本,则可以通过将NHibernate / Mapping / ByCode /
PropertyPath.cs第66行从以下位置更改来修复该错误:return hashCode == other.GetHashCode();到:
return hashCode == other.GetHashCode() && ToString() == other.ToString();
请查看Google网上论坛以获取问题的完整详细信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)