我要简化我遇到的问题。所以我们假设我们有一个NHibernate的宠物领域,有斑点狗,蓬松猫,猎人猫,SSSS蛇这样在数据库中这些人看起来像:
ID Name Species
1 Spot 1
2 Fluffy 2
3 Hunter 2
4 SSSS 3
我们有一个物种表
ID Species
1 Dog
2 Cat
3 Snake
让我们说我们有一个包含这两个条目的皮肤类型表
ID Type
1 Furry
2 Scaley
一个看起来像
的查找表Species Type
1 1
2 1
3 2
如何映射它以便用对象拉入皮肤类型。
我看过像这样的映射文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="menagerie"
assembly="menagerie">
<class name="Pet" table="Pets">
<id name="Id">
<column name="id" />
<generator class="native" />
</id>
<property name="Name" />
<many to one name="Species"
class="PetSpecies"
column="Species"
cascade="all" />
<bag name="SkinType" table="Species_SkinType" cascade="none" lazy="false">
<key column="Species" />
<many-to-many class="SkinType" column="[type]" />
</bag>
</class>
</hibernate-mapping>
然而,应该填充宠物皮肤类型的包想要使用宠物的id作为查找键值,而不是宠物的物种。如何使用宠物的物种来填充宠物的皮肤类型?
答案 0 :(得分:1)
我会将SkinType映射为Pet的多对一关系。在UI和验证中应使用将Species链接到SkinType的多对多表,以仅允许为Species选择有效的SkinType。我不会尝试在模型中强制执行此约束。
答案 1 :(得分:1)
foreign-key
属性是否可以提供帮助?见this answer
答案 2 :(得分:1)
好吧,我明白了。
包不应该在Pet类上,而应在Species类上。
所以没有Fluffy.Skintype =毛茸茸,而是有Fluffy.Cat.Skintype =毛茸茸。