实体框架6数据库第一种方法不从SQL Server

时间:2016-02-26 20:43:35

标签: sql-server asp.net-mvc entity-framework asp.net-mvc-5 entity-framework-6

当我在ASP.NET MVC 5项目中使用“数据库优先”方法创建模型时,并非所有来自SQL Server的表都在我的项目中创建。

我一步一步地遵循了本文中的所有内容: https://www.asp.net/mvc/overview/getting-started/database-first-development/creating-the-web-application

ASP.NET MVC项目模型:

enter image description here

SQL Server数据库:

enter image description here

我的SQL Server数据库中有三个表尚未在模型中创建。该表是 AspNetUserRoles,ContactsAddresses和IssuesItems

以下是三个缺失表格的设计:

AspNetUserRoles:

enter image description here

ContactsAddresses:

enter image description here

IssuesItems:

enter image description here

所有三个缺失的表都是在SQL Server中创建的,以消除多对多的关系,并且它们都有两个连接两个表的主键。

为什么会发生这种情况,我该怎么做才能解决它?

谢谢。

2 个答案:

答案 0 :(得分:4)

按照惯例,EF避免映射只有PK / FK列的junction tables。它会照顾(填充/咨询/等)这些表。例如,如果您检查Issue实体,则会看到类型为Item的集合属性。

public virtual ICollection<Item> Items{get;set;}

Item实体和其他实体也是如此。

当您编写涉及这些集合属性之一的查询时,EF将为您生成涉及联结表的正确sql语句,这有助于您跨越该桥,而无需编写其他代码。

这并不意味着不可能在EF中映射这些表,实际上有people建议避免使用这种关系映射以获得更清晰,并且更接近于您通常在SQL中执行的操作。但要做到这一点,你需要跳转到Code First。例如,您可以使用EF Power Tools之类的工具生成模型,或者实际上,您可以使用 ADO.NET实体数据模型,但使用数据库中的 Code First < / em>选项而不是来自数据库的EF Designer 。使用这些工具,您的模型将按照您已有的方式生成,但您可以添加类来表示您的联结表,并在它们之间创建一对多关系,实体涉及此blog post中的示例,但恕我直言我更喜欢EF照顾那些桌子。

答案 1 :(得分:1)

当搜索时,我发现了这个问题,这个答案可能与解释的问题没有完全相关,但对于那些正在寻找答案的人,为什么不是所有的表都被创建

如果您与该表有关系,则需要为该列添加主键属性。