我正在尝试通过映射将对象集合放入父对象中。
我有一个主键是 guid (Id) 的父对象“ScoreCard”和一个主键是 guid (Id) 的子“Score”对象。我想根据两个对象都有的两个字段为父对象选择子对象,但我无法让它工作,这是映射
<bag name="ScoreCard">
<key>
<column name="HoleId"/>
<column name="PlayerId"/>
</key>
<one-to-many class="Score" not-found="ignore"/>
</bag>
我没有设计数据库,但 ScoreCard 对象来自一个 View ,该 View 返回我需要的列以及邪恶的 guid。无论我尝试过什么,NHibernate 都会抛出关于外键与主键不同的异常。
在我看来,这是最简单的要求,根据一定的条件获取一组东西,为什么我这么卡?
感谢您的帮助,对于错误的示例代码感到抱歉(在亲戚家下意识地观看高尔夫)。
最佳答案
好吧,我终于找到了。父对象是从提供三列且没有键的 View 中绘制的。我可以将复合键映射到 HoleId 和 PlayerId,而不是我在查看代码时发现的邪恶 guid。这很棒,因为我可以轻松映射我需要的 Score 对象,然后使用 NHibernateUtil.Initialize 延迟加载它们。
我的映射 xml 需要如下所示
<class name="ParentObject">
<composite-id>
<key-property name="HoleId" column="HoleId" />
<key-property name="PlayerId" column="PlayerId" />
</composite-id>
<property name="EvilGuid" column="Id" />
<bag name="ScoreCard">
<key>
<column name="HoleId"/>
<column name="PlayerId"/>
</key>
<one-to-many class="Score" not-found="ignore"/>
</bag>
</class>
我的灵感来自this post ,也请关注Stefan的回答,因为我觉得我在这里很幸运,多考虑一下DDD,设计可以做得更好。
感谢您的帮助。
关于nhibernate - NHibernate 获取没有主键的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773443/