NHibernate列表索引映射到非可空数据库列

时间:2012-06-12 14:40:31

标签: c# nhibernate list indexing

我正在尝试使用NHibernate映射列表,这是父子关系的一部分。数据库结构是:

CREATE TABLE [dbo].[salesvouchers](
[ID] [int] IDENTITY(1,1) NOT NULL,
[id_vouchertype] [int] NOT NULL,
[id_salespoint] [int] NOT NULL) /*and a couple more fields*/
CREATE TABLE [dbo].[salesvouchersitems](
[ID] [int] IDENTITY(1,1) NOT NULL,
[id_salesvoucher] [int] NOT NULL,
[itemposition] [int] NOT NULL)

两个表都与具有外键的id_salesvoucher列相关联。问题是itemposition列是SalesVoucherItem列表的索引。将此映射文件用于salesvoucher类:

<class name="SalesVoucher" table="salesvouchers">
      <id name="Id" column="id">
         <generator class="native" />
      </id>
      <list name="Items" table="salesvouchersitems" lazy="true" cascade="all-delete-orphan">
         <key column="id_salesvoucher"/>
         <index column="itemposition"/>
         <one-to-many class="SalesVoucherItem"/>
      </list>
   <!--and more fields not relevant here-->
   </class>

这似乎没问题,但是在进行测试以将新的SalesVoucher类插入到数据库中且列表中有一些SalesVoucherItem时,它会抛出SQL错误: “无法在itemposition列中插入NULL。列不接受空值”

似乎NH正在尝试在该位置插入NULL,这对我来说没有意义,因为列表中的索引是必需数据,应该在数据库中声明。 有任何想法吗?谢谢您的帮助!问候。

1 个答案:

答案 0 :(得分:1)

您必须将itemposition列公开为属性并设置其值。 NHibernate不能为你做到这一点。