2

我正在尝试通过映射将对象集合放入父对象中。

我有一个主键是 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 对象来自一个视图,该视图返回我需要的两个列以及邪恶的 guid。无论我尝试过什么,NHibernate 都会不断抛出关于外键与主键不同的异常。

在我看来,这似乎是最简单的要求,给定一些标准来收集东西,为什么我会这么卡?

感谢您的帮助,对于糟糕的示例代码(在亲戚家观看潜意识高尔夫)感到抱歉。

4

2 回答 2

3

嗯,我终于找到了。父对象是从给出三列且没有键的视图中绘制的。我可以将复合键映射到 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>

我是从这篇文章中得到灵感的,也请关注Stefan的回答,因为我觉得我在这里很幸运,如果多考虑DDD,设计可以做得更好。

谢谢你的帮助。

于 2009-04-22T09:58:03.460 回答
1

问题是这样的:NHibernate 最适合(但不仅限于)DDD,这意味着首先创建域类并使数据库最适合域模型。

您与非主键字段具有复合 ID 关系。所以开始祈祷 NHibernate 可以应付这个问题。支持非主键的复合 ID 和关系 - 对于遗留数据库 - 通常不鼓励 DDD。

我认为两者的结合是行不通的。在 NHibernates 问题跟踪器上查看此问题: https ://nhibernate.jira.com/browse/NH-1722 。您可以在那里为该功能投票。

于 2009-04-21T22:10:34.473 回答