实体框架有许多不正确的表映射

时间:2017-05-18 10:16:50

标签: c# entity-framework

我正试图让这很多可能关系工作,这里是架构

enter image description here

我的实体有以下配置,首先是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使用约定?请帮忙。

3 个答案:

答案 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)

这是我的错。我负责自动注册类型配置的代码有一些问题,上面的两个答案都是正确的。