Sql server Entity Framework 6数据库优先方法不从SQL Server创建所有表

Sql server Entity Framework 6数据库优先方法不从SQL Server创建所有表,sql-server,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,Sql Server,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,当我在ASP.NET MVC 5项目中使用“数据库优先”方法创建模型时,并非所有来自SQL Server的表都是在我的项目中创建的 我一步一步地遵循了本文中的所有内容: ASP.NET MVC项目模型: SQL Server数据库: 我的SQL Server数据库中有三个表尚未在模型中创建。该表为AspNetUserRoles、contactsaddress和issueItems 以下是三个缺失表格的设计: AspNetUserRoles: 联系人地址: 问题项: 所有三个缺少的表都

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

我一步一步地遵循了本文中的所有内容:

ASP.NET MVC项目模型:

SQL Server数据库:

我的SQL Server数据库中有三个表尚未在模型中创建。该表为AspNetUserRoles、contactsaddress和issueItems

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

AspNetUserRoles:

联系人地址:

问题项:

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

为什么会发生这种情况?我能做些什么来修复它


谢谢。

EF按惯例避免映射只有PK/FKs列的表。它会为您小心地处理(填充/查询/etc)这些表。例如,如果检查您的
问题
实体,您将看到类型为
的集合属性

public virtual ICollection<Item> Items{get;set;}
公共虚拟ICollection项{get;set;}
实体和其他实体也会发生同样的情况

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


这并不意味着不可能在EF中映射这些表,事实上,为了更清晰,更接近您通常在SQL中所做的工作,建议避免这种关系映射。但要做到这一点,您需要首先跳转到代码。例如,您可以使用诸如ADO.NET实体数据模型之类的工具生成模型,或者实际上,您可以使用ADO.NET实体数据模型,但可以使用“首先从数据库中使用代码”选项,而不是“从数据库中使用EF设计器”。使用这些工具,您的模型将按您已有的方式生成,但您可以添加类来表示连接表,并在它们和实体之间创建一对多关系,如本例所示,但是我更喜欢EF为我处理这些表格。

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


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

同意。除非“关系具有标量属性”,否则您不会得到额外的“对象”(表示表)…您会得到子集合(正如octaviocci所描述的)。EF工作正常。如果您有一个EmployeeToJobTitle(M:N),并且该表有一个“StartDate”(用于~relationship)…您将在.cs类中获得“额外”实体。这是思想上的一点转变。这不是一对一的关系。我不让EF处理这种情况的一个原因是,如果我认为在未来的关系中会有一个可能的属性……这可能需要一个迷你水晶球,但有时我有一种直觉,“它并不总是一个简单的M:N”。我总是建议人们做一个概念证明,并且有2个M:N。简单的和复杂的,在关系上有属性的。这样,您就知道如何对这两个选项进行编码。