NHibernate映射一个引用表

时间:2009-04-24 07:28:58

标签: sql-server nhibernate

我有一个相当复杂的场景/设计要理清,并且非常欣赏一些建议或见解。

我试图将以下内容映射得不太成功。

<class name="CalEvent" table="tb_calEvents" lazy="false" >

<id name="id" column="id">
  <generator class="hilo"/>
</id>

<property name="summary"/>
---snip----

<bag name="categories"  table="tb_calEvent_category" lazy="false">
  <key column="parentID"/>
  <one-to-many class="Category"/>
</bag>

//////////////////

<class name="Category" table="tb_calEvent_category" lazy="false">

<id name="id" column="id" unsaved-value="0">
  <generator class="hilo"/>
</id>

<property name="categoryID"/>

<property name="parentID"/>

<property name="categoryType"/>

类别表

[id] bigint NULL [parentID] bigint NULL [categoryType] nvarchar(255)NULL [categoryID] int NULL CONSTRAINT [tb_calEvent_category_fk] FOREIGN KEY([parentID])

上面的tb_calEvent_category表似乎已被设置为一种查找表。 每个表中有3种不同的类别; catergoryType是对类别所在表的引用以及该表主键的categoryID。

我检索calEvents没有问题,但无法干净地添加或更新。

有没有人想过如何映射这个?可能吗?或者我是否需要跳过一些箍来成功地将calEvents添加并更新到db?

我认为此表已经设置为这样可以减少连接或者可以添加其他类别。嗯..

谢谢

1 个答案:

答案 0 :(得分:2)

我认为这是你的主要问题:

<id name="id" column="id" unsaved-value="0">   
    <generator class="hilo"/> 
</id>

<property name="categoryID"/>

当您尝试将类别ID设置两次时。

这可能更像你所需要的:

 <id name="id" column="categoryID" unsaved-value="0">   
    <generator class="hilo"/> 
 </id>

另外,使用sqlserver身份生成器(本机)可能更好,确保在sqlserver中将列设置为identifier,并确保FK关系正常。