NHibernate映射一对一/多对一?

时间:2013-12-31 14:03:17

标签: c# nhibernate nhibernate-mapping

我还不熟悉NHibernate,但我试图理解它(边做边学)。 我将简要介绍一下我的表格布局和XML映射,希望你能帮我解决这个问题。

表'设备':

id              int(11)
account_id      int(11)
class           tinyint(4)
slot1           int(11)
slot2           int(11)
slot3           int(11)
slot4           int(11)
slot5           int(11)
slot6           int(11)
slot7           int(11)
slot8           int(11)

表'项目':

id              int(11)
account_id      int(11)
code            varchar(4)
purchase        int(11)
duration        bigint(20)

在类中,Slot1-8(设备)是DS.Item(这是items-table的类)。 因此,如果我有一个id为1512的项目作为示例,并且此ID在Equipment表中是slot3,我希望在类中看到DS.Item。请注意,项目可以同时在多个插槽上使用。如果Slot的ID为-1,则此Slot应为空(NULL)。在0上它应该是默认值(手动处理,而不是数据库对象)。

班级(BattleClass)具有特殊意义。这是关于一个有5个班级的游戏。例如,我可以在1类插槽3和4,3类插槽5和7中使用相同的项目,......

所以这是我的映射:

<class name="Parity.DS.Equipment,Parity.DS" table="equipment" lazy="false">
    <id name="Id" column="id" generator="identity" />
    <one-to-one name="Slot1" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot2" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot3" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot4" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot5" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot6" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot7" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <one-to-one name="Slot8" constrained="false" foreign-key="Id" class="Parity.DS.Item" />
    <property name="BattleClass" column="class" />
    <many-to-one name="Owner" unique="true" class="Parity.DS.Account" insert="false" update="false">
        <column name="account_id" unique="true" />
    </many-to-one>
</class>
<class name="Parity.DS.Item,Parity.DS" table="items" lazy="false">
    <id name="Id" column="id" generator="identity" />
    <property name="OwnerId" column="account_id" />
    <many-to-one name="Owner" unique="true" class="Parity.DS.Account" insert="false" update="false">
        <column name="account_id" unique="true" />
    </many-to-one>
    <property name="Code" column="code" />
    <property name="BoughtAt" column="purchase" />
    <property name="Duration" column="duration" />
</class>

我真的希望你能理解我想要做的事情。如果有任何问题,请随时询问:)

修改

我发现了问题

<set name="Equipment" lazy="true" fetch="select">
    <key column="account_id" unique="true" />
    <!-- foreign-key="" -->
    <one-to-many class="Parity.DS.Equipment" />
</set>

一对多的课程以前是Parity.DS.Item!很长一段时间没有注意到......地狱呀现在就知道了!

0 个答案:

没有答案