我正在尝试构建一个具有以下类/关系结构的已修改角色系统:
项目 ProjectRole 雇员
其中
ProjectEmployee将三个实体映射在一起。
我有一个从Project到ProjectEmployee的一对多映射,以及从ProjectEmployee到Project的参考映射。
我可以添加新的ProjectEmployee就好了(这意味着我的Create活动也很好),但是我想限制关系,每个Employee只有一个条目。这会影响我的Update活动的逻辑。
在一起黑客攻击时,我试图清空Project.ProjectEmployees(通过将值设置为新的List),然后添加具有相应角色的ProjectEmployee的新实例等。
在执行此操作时,我收到与将Project.ProjectEmployees设置为空List相关的错误。
“无法将值NULL插入列'ProjectId',表'AppDB.dbo.ProjectEmployees';列不允许空值.UPDATE失败。 声明已经终止。“
如果我删除列表中的新闻行,则会添加后续记录,但之后我会盯着每位员工过多的记录。
这是我的项目 - > ProjectEmployees映射:
mapping.HasMany<ProjectEmployee>(x => x.ProjectEmployees)
.Cascade.All()
.WithKeyColumn("ProjectId");
ProjectEmployee中的映射 - &gt;项目:
mapping.References(x => x.Project, "ProjectId");
应该简单吧?
为了它的价值,我还在我的Project类中添加了一个名为AddProjectEmployee的方法,该方法搜索有问题的Employee,如果他存在则删除他的ProjectEmployee,然后添加新的ProjectEmployee。当我打电话给我时,我得到同样的错误。
任何帮助都将不胜感激。
尼克
答案 0 :(得分:1)
这是cross-posted on the Fluent NHibernate group并由Hudson Akridge回答。正如Hudson所说,解决方案是在集合上使用Clear()
,因为它允许NHibernate跟踪更改(而新的集合会导致属性引用NH不知道的实例)。