1

我有 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(); - 从项目中清除所有能力如果我向项目添加新的组合,我可以简单地添加:Project.Competencies.Add(item);

但是我的 Commits 映射似乎由于某种原因而抛出,

消息:无法更新身份列“fRC_Commit_ID”。

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

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

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

4

1 回答 1

1
  • 上的 keycolumn 指向 iod 而不是外键列
  • 该表可以省略,因为 Commit 是它自己的实体,有自己的表
  • 因为你有一个项目的反向引用,你可以让反向引用维护foreign_key。在 Collection 上设置 inverse 以标记

代码

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
于 2013-06-11T06:52:22.577 回答