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的反向引用,所以可以让反向引用维护外键。在集合上设置“反转”以标记该值
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