使用nHibernate加载子对象的特殊场景

时间:2009-10-21 08:48:24

标签: nhibernate nhibernate-mapping

我正在写一个应用程序中有一个“怪异”的场景,并试图掌握我可以使用nHibernate实现。

场景是这样的...有一个测试。测试由一系列Testlet组成(Testlet是一组预定义的问题,带有元数据......)。

事情......当我正在运行测试时,根据测试的特征(它的等级和类型......),从数据库中随机选择构成测试的测试对象。

这一切意味着在我的数据库的Testlet表中,Test表中不应该有FK。我认为我指向存储过程中的自定义将完成这项工作 - 但是,当我将映射hbms模式导出到空DB时,它仍然在我的Testlet表中创建外键。

这是我的测试映射:

<class name="Test">
    <id name="UID">
      <generator class="guid" />
    </id>
    <property name="Type" />
    <property name="Description" />

    <bag name="Items" generic="true" inverse="false">
      <key column="UID"/>
      <one-to-many class="Testlet"/>
      <loader query-ref="loadTestletByTestID"/>
    </bag>
  </class>

<sql-query name="loadTestletByTestID">
    <load-collection alias="items" role ="Test.Items"/>
    exec [TestletByTestID] ?
  </sql-query>

有没有办法绕过自动创建的外键?

非常感谢, 天使

1 个答案:

答案 0 :(得分:0)

为什么不直接从映射中删除Items,并调用查询来加载随机项并在加载Test后分配它们?那你甚至不需要存储过程。

如果在加载测试后没有代码自动加载它是非常重要的,你可以将这些代码放入NHibernate中。然后只要加载测试就会执行它。但实际上,我怀疑这是值得的。