【问题标题】:Updating one-to-many with Fluent NHibernate使用 Fluent NHibernate 更新一对多
【发布时间】:2014-01-17 03:48:38
【问题描述】:

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

项目 项目角色 员工

在哪里

ProjectEmployee 将三个实体映射在一起。

我有一个从 Project 到 ProjectEmployee 的一对多映射以及从 ProjectEmployee 到 Project 的引用映射。

我可以添加新的 ProjectEmployee 就好了(这意味着我的 Create 活动也很好),但我想将关系限制为每个员工只有一个条目。这会影响我的更新活动的逻辑。

在一起破解时,我试图清空 Project.ProjectEmployees(通过将值设置为新列表),然后添加具有适当角色的 ProjectEmployee 的新实例,等等。

在执行此操作时,我收到与将 Project.ProjectEmployees 设置为空列表相关的错误。

“无法将值 NULL 插入到列 'ProjectId'、表 'AppDB.dbo.ProjectEmployees' 中;列不允许空值。更新失败。 声明已终止。”

如果我删除列表中的新闻行,则会添加后续记录,但我会看到每个员工的记录太多。

这是我的项目 -> ProjectEmployees 映射:

mapping.HasMany<ProjectEmployee>(x => x.ProjectEmployees)    
    .Cascade.All()
    .WithKeyColumn("ProjectId");

以及 ProjectEmployee -> Project 中的映射:

mapping.References(x => x.Project, "ProjectId");

应该很简单吧?

值得一提的是,我还在我的 Project 类中添加了一个名为 AddProjectEmployee 的方法,该方法搜索有问题的 Employee,如果他存在则删除他的 ProjectEmployee,然后添加新的 ProjectEmployee。当我调用它时,我得到了同样的错误。

任何帮助将不胜感激。

尼克

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

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

    【讨论】:

    • 谢谢斯图尔特。我也看到了 FNH 组的回复,Clear 确实解决了我的问题。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多