gpt4 book ai didi

NHibernate,非复合 ID 和 GetHashCode

转载 作者:行者123 更新时间:2023-12-04 06:02:54 26 4
gpt4 key购买 nike

当我的域模型在数据库中有一个复合键时,我会在忘记覆盖 Equals/GetHashCode 时得到一个异常

NHibernate.MappingException: composite-id class must override Equals():

当我有一个非复合 ID 时,为什么它不会给我同样的错误?

最佳答案

NHibernate 在其内部状态跟踪引擎中使用您的类的主键值来识别该实例。

当您的域中只有一个主键属性时,NHibernate 将使用该属性返回的值作为键值,调用 GetHashcodeEquals在值上,使用主键就像在 Dictionary<TKey,TValue> 中使用它一样实例。

当有多个主键属性形成一个组合键时,NHibernate 没有简单的方法来获取它可以使用的键值。它要求您定义如何确定两个实例之间的相等性,从而有效地将实例转换为自己的键,就像在 HashSet<T> 中一样。 .

如果您没有覆盖 EqualsGetHashCode在您使用复合键值的类型上,它不反射(reflect)数据模型使用的“相等性”(如果两行具有相同的主键,则它们相等)并且 NHibernate 无法确定它正在跟踪正确的实体;这就是发生异常的原因。

您可以找到复合键的概述以及有关处理它们的巧妙方法的更多信息 here .

关于NHibernate,非复合 ID 和 GetHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com