2009-04-24 105 views
1

我有一个颇为曲折的场景/设计进行梳理和将非常感激一些建议或见解。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成功添加和更新到数据库?

我想这个表已经设置好了,这样可以减少连接或者可以添加其他类别。嗯..

感谢

回答

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来标识,并确保了FK关系是应该的。

+0

谢谢,我不能这样做,因为categoryID字段引用其他三个表中的一个表中的记录。 – user17510 2009-04-24 08:49:42