我正试图让这很多可能关系工作,这里是架构
我的实体有以下配置,首先是ContentBranch实体:
configuration.HasMany(e => e.ContentLeafs)
.WithMany(e => e.ContentBranches)
.Map(m => m.MapLeftKey("ContentLeafId").MapRightKey("ContentBranchId").ToTable("ContentBranchLeafs"));
然后是ContentLeaf实体:
configuration.HasMany(e => e.ContentBranches)
.WithMany(e => e.ContentLeafs)
.Map(e => e.MapLeftKey("ContentBranchId").MapRightKey("ContentLeafId").ToTable("ContentBranchLeafs"));
我正在尝试执行以下测试代码:
theBranch.ContentLeafs.Add(theLeaf);
await contentBranchRepository.Update(theBranch);
问题在于我猜测的映射,因为我得到以下异常:
保存不公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅InnerException。
内部异常:
无效的对象名称'dbo.ContentLeafContentBranches'。
当我提供显式表名时,有谁知道为什么EF使用约定?请帮忙。
答案 0 :(得分:2)
尝试在实体配置中切换映射键,即:使用MapRightKey为ContentLeaf切换MapLeftKey,您也可以对Content分支执行相同的操作。这解决了我的问题。
答案 1 :(得分:2)
在Fluent Api中,您只需设置一侧。
立即尝试使用此
configuration.HasMany(e => e.ContentLeafs)
.WithMany(e => e.ContentBranches)
.Map(m => m.MapLeftKey("ContentLeafId").MapRightKey("ContentBranchId").ToTable("ContentBranchLeafs"));
答案 2 :(得分:0)
这是我的错。我负责自动注册类型配置的代码有一些问题,上面的两个答案都是正确的。