实体框架6 - 缺少表,只有主键引用不同的表

Tra*_*den 14 .net c# entity-framework entity-framework-6

当我们离开Linq2Sql时,我们正在学习Entity Framework 6.1(来自NuGet).我们有一小部分表关联两个单独的表,如下所示.

EF6数据库第一代

数据库图:

在此输入图像描述

架构概述:

在此输入图像描述

当在Visual Studio,空白类库中,执行Database First EF6 EDMX文件时,该图只生成TableA和TableC - TableB不会生成.

在此输入图像描述

视觉工作室查看:

在此输入图像描述

您可以看到只创建了TableA和TableC.从技术上讲,应该已经创建了TableB,因为您希望能够管理这些引用.

图中所示的A和C之间的关联:

在此输入图像描述

我觉得我错过了一个选项,或者误解了实体框架的一个关键概念.知道如何用T4生成缺少的TableB吗?EDMX文件确实显示它,但由于某种原因,它不会生成到.CS文件中,其中两个属性指示关系.

我们需要这个的主要原因是我们扩展了EF6 T4模板以添加一些工厂模式以匹配我们现有的模型.因为它不会为TableB生成一个类,所以我们不会得到我们正在寻找的自动生成的代码.

想法/建议?谢谢.

Mon*_*nah 7

EF不会生成弱实体或连接表,您需要通过流畅的API或使用数据注释手动配置关系

正如微软网站上所述:根据关系惯例:

注意:如果相同类型之间有多个关系(例如,假设您定义了PersonBook类,其中 Person类包含ReviewedBooksAuthoredBooks导航属性,Book类包含AuthorReviewer 导航属性),则需要使用数据注释手动配置关系或者流畅的API.有关更多信息,请参阅数据注释 - 关系和Fluent API - 关系.

有关更多信息,请参阅此链接

更新

对于EDMX(但成本维护),解决方法将如下工作:

  1. 从数据库中的连接表中删除外键
  2. 从数据库更新EDMX
  3. 在连接表中重新创建外键

只要您不再次从数据库更新模型,此解决方法就会起作用.

建议的解决方案,保留EDMX生成的所有内容,并使用以下链接了解有关如何使用crud操作的更多信息,这些链接由用户"@TravisWhidden"报告为"有用"

  1. 插入/更新多个到多个实体框架.我该怎么做?
  2. https://www.youtube.com/watch?v=uMQwORSTGX4(视频)