我有两个使用流畅的NHibernate映射的类 - User和UserRoleAssignment。用户有许多UserRoleAssignments。这是用户的相关地图:
HasMany(x => x.Roles)
.Table("UserRoleMap")
.Cascade.SaveUpdate();
对于UserRoleAssignment:
Map(x => x.User_Id);
如您所见,我只是从User引用UserRoleAssignment。从UserRoleAssignment,我只映射外键列(User_Id)。 问题是,当我保存用户时,我得到一个由外键约束引起的异常,因为NHibernate在User_id属性的值中插入0。这只发生在新用户上 - 现有用户(已经有ID),工作正常。
所以问题是,我怎样才能确保NHibernate将User_Id的值设置为插入新用户时生成的ID?
非常感谢!
答案 0 :(得分:0)
http://nhibernate.info/doc/nh/en/index.html#collections-onetomany中记录了这一点:
非常重要注意:如果
<key>
关联的<one-to-many>
列声明为NOT NULL
,则NHibernate在创建或更新关联时可能会导致约束违规。要防止出现此问题,必须使用标记为inverse="true"
的多值结束(集合或包)的双向关联。请参阅本章后面的双向关联讨论。