MV6 EF6数据库首先可能吗?

时间:2016-03-14 14:37:08

标签: entity-framework-6 asp.net-core-mvc

我需要知道是否有办法首先使用实体​​框架6数据库与MVC6?如果有,有人可以提供相同的步骤吗?

1 个答案:

答案 0 :(得分:2)

EF 6数据库优先

使用EF 6.1.3,有一个"数据库优先"选项将生成包含所有模型信息(存储,概念,映射)的.edmx文件。要访问它是VS 2015,项目 - >添加新项,然后选择 ADO.NET实体数据模型;在实体数据模型向导的第一个屏幕上,从数据库中选择 EF Designer 。完成向导后,它将生成.edmx文件并将其添加到项目中。您可以使用可视化设计器/图表GUI来更改模型,也可以直接编辑XML(.edmx文件)。设计器中有一些不支持的东西,所以你最好可能在某些时候编辑XML。值得一提的另一点是,如果您的数据库稍后更改,则有一个从数据库更新模型选项(查看图表时,右键单击图表中的空白区域,您应该看到一个上下文菜单,带有“从数据库更新模型”选项)。但是,这只会更新.edmx文件中的存储模型;您仍然负责更新您的概念模型,以及两者之间的映射(使用GUI或编辑XML)。

我也对使用Database First方法感兴趣,花了很多时间摆弄.emdx文件来尝试创建我很满意的工作流程,但最终放弃了这种方法。我放弃的主要原因是我想要一种完全自动化的方式来在数据库更改后更新模型;使用数据库第一种方法,唯一的选择是在数据库更新后在GUI中进行手动更改。有一个名为edmgen.exe的命令行工具,据说可以自动生成.edmx文件,乍一看看起来像是自动化的解决方案。但是,edmgen.exe缺少一些仅在GUI中可用的关键功能。具体来说,命令行工具不支持存储过程;生成包含存储过程的.edmx文件的唯一方法是通过GUI,避免手动编辑GUI中的概念模型和映射的唯一方法是删除.edmx文件并从中重新生成每次刮擦。我无法想出一个自动化的方法来做到这一点,所以我放弃了。此外,下一版本的Entity Framework(EF 7又名EF Core 1.0)不再支持.edmx个文件。在当前EF 6工具的限制和完全缺乏支持的情况下,使用.edmx文件的Database First方法看起来就像一个deadend。

我的要求非常简单。我只想在我的数据库和C#Entity类之间进行1:1映射,可以在数据库更改后自动更新。我不需要复杂/自定义映射,继承等。我只需要一个简单的1:1映射,类似于过去几年中使用Linq To Sql所获得的映射。我最终使用的解决方案是 Code First From Database 以及允许您自定义代码生成的T4模板,并在数据库更改后自动重新生成所有代码。如果您的要求像我一样简单,我强烈推荐以下内容:

" EntityFramework Reverse POCO Generator"

https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838 https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator

Visual Studio图库链接有一个显示其工作原理的视频。非常简单,并且允许我正在寻找的全自动数据库优先方法。

ASP.NET MVC Core 1.0

在将其与ASP.NET MVC Core 1.0(又名ASP.NET 5 MVC 6)集成方面,我发现最简单的方法是创建一个包含EF 6代码的常规类库(例如,数据库优先,或使用上述T4模板从数据库中获取代码优先)。然后,在ASP.NET项目中引用您的类库。当我这样做时,我只针对完整框架(而不是Core),因此我修改了ASP.NET项目中的project.json文件,以按如下方式设置框架:

"frameworks": {
    "dnx46"
}

我针对完整的4.6框架构建了我的类库,并包含对EF 6.1.3的引用。然后,我在ASP.NET项目中使用添加引用来引用类库项目(.csproj)(两个项目都在一个.sln文件中)。添加.csproj引用后,Visual Studio正在生成有关实体框架(NU1007: Dependency specified was EntityFramework >= 6.1.3 but ended up with EntityFramework 1.0.0)版本不匹配的警告。我相信这是Visual Studio 2015中的一个错误;您可以通过编辑由Visual Studio自动生成的project.json文件作为“添加引用”操作的一部分来解决此问题。如果查看解决方案的根文件夹,则应看到名为wrap的文件夹。在wrap文件夹中,您可以找到类库和任何依赖项(包括实体框架)的子文件夹。 EntityFramework子文件夹包含project.json文件,如下所示:

{
  "version": "1.0.0-*",
  "frameworks": {
    "net46": {
      "bin": {
        "assembly": "../../Data/packages/EntityFramework.6.1.3/lib/net45/EntityFramework.dll"
      }
    }
  }
}

如果您修改version并将其更改为" 6.1.3 - *"然后重新加载你的ASP.NET项目,NU1007警告将消失。更多细节在这里:

https://github.com/aspnet/Tooling/issues/374#issuecomment-196664962