我有 3 个表:用户、部门和用户部门。用户可以关联多个部门,部门可以关联多个用户。我在双方都使用多对多流畅映射,如下所示:
对于部门
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”;列不允许空值。INSERT 失败。\r\n语句已终止。
我有相同的 HiLo 生成器与其他表一起使用,所以我很确定它不会导致此故障。
有人可以阐明这个问题吗?我记得过去在插入 null Id 时遇到了问题,它是通过在集合上使用逆映射解决的,但我不能在两边都使用逆,所以我需要另一种解决方案。