C# Fluent映射:映射集合错误

C# Fluent映射:映射集合错误,c#,fluent-nhibernate,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Fluent Nhibernate Mapping,我有两个集合映射,一个在工作,另一个不工作。我不明白为什么 public class ProjectMappings : ClassMap<Project> { public ProjectMappings() { HasMany(x => x.Commits).Table("tCommits").Cascade.All().KeyColumn("fRC_Commit_ID").ForeignKeyConstraintName("fRC_Proje

我有两个集合映射,一个在工作,另一个不工作。我不明白为什么

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();
    }
}
公共类项目映射:类映射
{
公共项目映射()
{
HasMany(x=>x.Commits).Table(“tCommits”).Cascade.All().KeyColumn(“fRC\u Commit\u ID”).ForeignKeyConstraintName(“fRC\u Project\u ID”);
HasMany(x=>x.Competencies).Table(“tccompetencies”).Cascade.All().KeyColumn(“fIC_ID”).ForeignKeyConstraintName(“fIC_项目ID”);
}
}
公共类CommitsMappings:ClassMap
{
公共委员会映射()
{
表(“TCOMITS”);
Id(x=>x.Id,“fRC\u Commit\u Id”);
Map(x=>x.ProjectID,“fRC_Project_ID”).Not.Nullable();
}
}
公共类组件:类映射
{
公共comps()
{
表(“T竞争力”);
Id(x=>x.ProjectCompetencyID,“fIC_Id”);
Map(x=>ProjectID”,fIC_Project_ID”).Not.Nullable();
}
}
如果我运行代码: Project.capabilities.Clear();-从项目中清除所有能力 如果我向一个项目添加了一个新的comp,我可以简单地通过以下方式添加:project.capabilities.add(item)

然而,由于某种原因,我的提交映射似乎会抛出

消息:无法更新标识列“fRC\U Commit\U ID”。

这是什么意思?为什么会发生这种情况

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

问题:将这两个集合映射到项目的正确方法是什么
  • 上的keycolumn指向iod,而不是foreignkey列
  • 由于Commit是具有自己表的自己的实体,因此可以对该表进行OMMITE
  • 因为您有一个对project的反向引用,所以可以让反向引用维护外键。在集合上设置“反转”以标记该值
  • 代码

    • 上的keycolumn指向iod,而不是foreignkey列
    • 由于Commit是具有自己表的自己的实体,因此可以对该表进行OMMITE
    • 因为您有一个对project的反向引用,所以可以让反向引用维护外键。在集合上设置“反转”以标记该值
    代码

    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