使用Fluent NHibernate更新一对多

时间:2009-05-09 19:57:55

标签: nhibernate fluent-nhibernate

我正在尝试构建一个具有以下类/关系结构的已修改角色系统:

项目 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。当我打电话给我时,我得到同样的错误。

任何帮助都将不胜感激。

尼克

1 个答案:

答案 0 :(得分:1)

这是cross-posted on the Fluent NHibernate group并由Hudson Akridge回答。正如Hudson所说,解决方案是在集合上使用Clear(),因为它允许NHibernate跟踪更改(而新的集合会导致属性引用NH不知道的实例)。