我有3个表:User,Department和UserDepartment。用户可以与多个部门相关联,部门可以与多个用户相关联。我在这两边使用多对多的流畅映射:
对于部门
HasManyToMany(x => x.Users)
.Table("UserDepartment")
.ParentKeyColumn("DepartmentId")
.ChildKeyColumn("UserId")
.AsSet()
.Cascade.All();
对于用户
HasManyToMany(x => x.Departments)
.Table("UserDepartment")
.ParentKeyColumn("UserId")
.ChildKeyColumn("DepartmentId")
.AsBag()
.Inverse()
.Cascade.None();
所有表格都使用HiLo Id生成器和几乎相似的映射,如下所示:
Id(p => p.Id).GeneratedBy.HiLo("HiLo", "NextHi", "32", "ForTable = 'UserDepartment'");
当我尝试将部分用户添加到部门时,nhiberante失败并显示错误:
无法执行批处理命令。[SQL:SQL不可用]。内心的 异常:无法将值NULL插入列' Id',表中 ' test.dbo.UserDepartment&#39 ;;列不允许空值。插入 失败。\ r \ n声明已经终止。
我有与其他表一样的HiLo生成器,因此我非常确定它不会导致此失败。
有人可以解释这个问题吗?我记得过去有过null Id插入的问题,它是通过对集合使用逆映射来解决的,但我不能在两边使用逆,所以我需要另一种解决方案。
答案 0 :(得分:1)
最后我找到了解决方案。有两种方法: