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

使用nHibernate加载子对象的特殊场景,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,在我正在编写的一个应用程序中,我遇到了一个“奇怪”的场景,并试图了解如何使用nHibernate实现 情况是这样的。。。有一个测试。测试由一系列的Testlet组成(Testlet是一组预定义的问题,带有元数据…) 事情。。。当我运行测试时,根据测试的特性(它的级别和类型是…),从数据库中随机选择组成它的testlet 这意味着在我的数据库中的Testlet表中,测试表不应该有FK。我认为在我的数据库中,一个指向存储过程的定制可以完成这项工作——然而,当我将映射hbms模式导出到一个空数据库时,

在我正在编写的一个应用程序中,我遇到了一个“奇怪”的场景,并试图了解如何使用nHibernate实现

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

事情。。。当我运行测试时,根据测试的特性(它的级别和类型是…),从数据库中随机选择组成它的testlet

这意味着在我的数据库中的Testlet表中,测试表不应该有FK。我认为在我的数据库中,一个指向存储过程的定制可以完成这项工作——然而,当我将映射hbms模式导出到一个空数据库时,它仍然会在我的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>

exec[TestletByTestID]?
有没有办法绕过自动创建的外键

非常感谢,
Angel

为什么不从映射中删除项,并调用查询来加载随机项,并在加载测试后分配它们?这样你就不需要存储过程了

如果在加载测试后不需要代码就自动加载它真的很重要,那么您甚至可以将此代码放到NHibernate中。然后,每当加载测试时都会执行它。但事实上,我怀疑这是否值得努力