我正在写一个应用程序中有一个“怪异”的场景,并试图掌握我可以使用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>
有没有办法绕过自动创建的外键?
非常感谢, 天使
答案 0 :(得分:0)
为什么不直接从映射中删除Items,并调用查询来加载随机项并在加载Test后分配它们?那你甚至不需要存储过程。
如果在加载测试后没有代码自动加载它是非常重要的,你可以将这些代码放入NHibernate中。然后只要加载测试就会执行它。但实际上,我怀疑这是值得的。