我对 nhibernate 有点陌生,遇到了一个问题。
我有以下表格:
Table 1:
我在使用复合 id 做事时遇到了很多问题,例如this。我建议做我所做的事情,即创建一个新类型,它只包含复合 id 用于 id 的内容,然后像这样映射它:
CompositeId<UserToDoId>(x => x.ID)
.KeyReference(x => x.UserIdPart, c_userID)
.KeyReference(x => x.AchievementIdPart, c_missionID);
其中 UserToDoId 具有复合 id 中使用的两个引用:
public class UserToDoId
{
User UserIdPart { get; set; }
Achievement AchievementIdPart { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as UserToDoId);
}
private bool Equals(UserToDoId other)
{
if (ReferenceEquals(other, null)) return false;
if (ReferenceEquals(other, this)) return true;
return UserIdPart.ID == other.UserIdPart.ID &&
MissionIdPart.ID == other.MissionIdPart.ID;
}
public override int GetHashCode()
{
unchecked
{
int hash = GetType().GetHashCode();
hash = (hash * 31) ^ UserIdPart.ID.GetHashCode();
hash = (hash * 31) ^ MissionIdPart.ID.GetHashCode();
return hash;
}
}
}
我不知道为什么,但是当您不使用另一种类型来保存组件 ID 的各个部分时,会出现一堆小问题。
我遇到的一个问题在我的答案一开始就链接到了。我的另一个做法是使用具有子类映射的父抽象类的复合 id 来尝试为某些查询创建抽象类的实例(您不能这样做)。实现这种新类型解决了这两个问题。
尝试一下,看看是否有效。另外,“achievment”被拼写为“achievement”(不是试图嘲笑,我只是希望您能避免人们因为拼写错误而嘲笑您的代码:-D)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)