Fluent Mappings:映射集合错误

时间:2013-06-10 09:25:22

标签: c# fluent-nhibernate fluent-nhibernate-mapping

我有2个集合映射,一个是工作,另一个不是。我无法弄清楚原因。

public class ProjectMappings : ClassMap<Project>
{
    public ProjectMappings()
    {

      HasMany(x => x.Commits).Table("tCommits").Cascade.All().KeyColumn("fRC_Commit_ID").ForeignKeyConstraintName("fRC_Project_ID");

        HasMany(x => x.Competencies).Table("tCompetencies").Cascade.All().KeyColumn("fIC_ID").ForeignKeyConstraintName("fIC_Project_ID");
    }
 }

public class CommitsMappings : ClassMap<Commit>
{
    public CommitsMappings()
    {
        Table("tCommits");
        Id(x => x.Id, "fRC_Commit_ID");

        Map(x => x.ProjectID, "fRC_Project_ID").Not.Nullable();
    }
}

public class CompsMappings : ClassMap<Competency>
{
    public CompsMappings()
    {
        Table("tCompetencies");
        Id(x => x.ProjectCompetencyID, "fIC_ID");
        Map(x => ProjectID", fIC_Project_ID").Not.Nullable();
    }
}

如果我运行代码: Project.Competencies.Clear(); - 所有能力都从项目中清除 如果我为项目添加一个新的comp,我可以简单地添加:Project.Competencies.Add(item);

然而,我对Commits的映射似乎是出于某种原因,

消息:无法更新标识列'fRC_Commit_ID'。

这是什么意思?为什么会这样?

我正在尝试删除一些能力,添加一些新的能力,并创建一个新的提交来显示项目的变化。在Transaction.Commit()上我得到了上面的错误。

问题:将这2个集合映射到项目的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

  • 指向碘而不是外键列的键列
  • 表可以省略,因为Commit是自己的实体,有自己的表
  • 因为您对项目有反向引用,所以可以让反向引用维护foreign_key。在集合上设置反向以标记

代码

HasMany(x => x.Commits)
    .Cascade.All()
    .KeyColumn("fRC_Project_ID")
    .Inverse();

// change Map(x => x.ProjectID, "fRC_Project_ID").Not.Nullable(); to
References(x => x.Project, "fRC_Project_ID").Not.Nullable(); // where Project property is of type Project