【发布时间】:2012-03-31 01:00:34
【问题描述】:
我有一个 User 对象,其中一个属性包含一个 Photos 属性,它是 IList 类型。
SQL 数据库中的表通过外键连接。即
表用户 { userid long NOT NULL....... } 表 UserPhoto { photoid long NOT NULL, userid long not null 引用 [User].UserId........ }
因此,如果没有相应的用户行,您将无法在 userphoto 中插入一行。
我想要做的是在代码中构建一个用户对象,添加一个用户照片对象的 Ilist(它必须包含一个空白的用户 ID,用户对象也是如此,因为它没有被保存和创建按身份插入)
我的映射如下
<class name="User" table="[User]">
<id name="UserId" column="Id">
<generator class="identity" />
</id>
<bag name="Photos" order-by="DisplayOrder asc" cascade="all">
<key column="UserId" />
<one-to-many class="UserPhoto" />
</bag>
</class>
<class name="UserPhoto" table="UserPhoto">
<id name="PhotoId" column="Id">
<generator class="identity" />
</id>
<property name="UserId" />
</class>
但是当我尝试使用 Nhibernate Session.Save(user) 保存用户对象时,它会抛出一个错误,提示外键约束失败。所以我猜测它试图在用户表之前的列表中插入用户照片,或者它没有在照片中设置新生成的用户 ID 属性并试图用空用户 ID 保存它们。
您是否必须在映射中添加一些额外的东西来表明这是一个外键列以及它适用于什么,以便 nhibernate 知道如何以正确的顺序插入相关行,以便我可以在一次插入中完成此操作?
【问题讨论】:
标签: c# nhibernate