是否有一个Entity Framework 7数据库优先POCO生成器?

58

我一直在研究Entity Framework 7和ASP.NET 5,用于正在开发的一个新项目,但是我遇到了一个难题。我所在的团队采用DBA优先的开发方法,即由DBA设计数据库,然后开发人员修改代码以适应模型变化。

使用EF6时,这种方法很有效,因为我们可以使用EDMX设计器的“更新”功能来更新代码。一个点击,我们就可以获得新类,完成了。然而,在EF7中,情况完全不同。不再有设计器了,我们需要使用Code-First,根据EF团队的一些博客文章,它还应该支持“Database-First”代码生成。

然而,在Visual Studio 2015 CTP6中的ASP.NET 5应用程序中,我无法弄清楚如何做到这一点。工具支持是否已经存在,或者我是否没有运气?这个功能会到来吗?


查找“反向工程代码优先”。 - DLeh
1
是的,我花了几天时间搜索。有很多关于如何使用EF6实现这一点的信息,但是在EF7中似乎没有办法。目前,我创建了一个EF6项目,在那里进行了反向工程,然后将文件复制到我的EF7项目中(由于EF7中不存在的命名空间而进行了一些修改),但从长远来看,我需要一个更稳定的解决方案。 - Ron Penton
1
我认为它们之间的差异不足以产生太大的影响。我认为EF7仍处于测试阶段,因此可能还没有完全支持它的功能。https://github.com/aspnet/EntityFramework/releases - DLeh
作为对读者的警告,该过程仍然存在许多缺陷。这些答案可能会帮到您,但在这个阶段仍然存在缺陷,有些人可能无法使其正常工作。 - Palu Macil
VS2017更新:如果您正在使用最新的微软产品套件,这里是他们的教程链接:https://learn.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db - smurtagh
4个回答

56

在最新版本中,可以使用dnx命令提示符和PowerShell命令来完成这个任务。

Scaffold-DbContext '<connectionString>' EntityFramework.MicrosoftSqlServer
dnx ef dbcontext scaffold "<connectionString>"  EntityFramework.MicrosoftSqlServer

或(自 EF Core RC2 起)

dotnet ef dbcontext scaffold "<connectionString>"  Microsoft.EntityFrameworkCore.SqlServer

为使该命令正常工作,您必须安装Microsoft.EntityFrameworkCore.Tools软件包。


请问您能告诉我在哪里运行这个命令吗?在哪里找到dnx命令提示符? - Pooran
1
我的错..明白了。http://blogs.msdn.com/b/sujitdmello/archive/2015/04/23/step-by-step-installation-instructions-for-getting-dnx-on-your-laptop.aspx - Pooran

12

可以使用NuGet软件包管理器控制台或命令提示符来完成此操作。我尝试使用命令提示符。在命令提示符中导航到项目文件夹后,我使用了类似的命令:

dnx ef dbcontext scaffold "Data Source=myServerName; Initial Catalog=myDatabaseName; Integrated Security=True" EntityFramework.SqlServer

我收到了关于缺少以下包的错误提示:

EntityFramework.Commands

EntityFramework.SqlServer.Design

在继续之前,请先执行以下命令:

dnu restore

实际所需的包可能因项目中提到的框架而异,这些框架在您的 project.json 文件中有所提及。

如果您无法在命令提示符处执行 dnx 或其他相关命令,请遵循 此链接,该链接已在另一个答案的评论中提到。

P.S. :这是当前命令列表 [在撰写本文时,最后更新时间为 Aug 21]:

ASP.NET - EntityFramework Wiki -- NuGet/DNX Commands


1
为 .NET Core RC2(2016年5月)新增了一个独立的语法答案。 - Simon_Weaver

9
以下是.NET Core RC2(2016年5月)的更新参数:
dotnet ef dbcontext scaffold -c RRStoreContext -o Model 
"Data Source=(local);Initial Catalog=DBNAME;Integrated Security=True"     
Microsoft.EntityFrameworkCore.SqlServer --force

请注意,Microsoft.EntityFrameworkCore.SqlServer是需要在命令中使用的包的新名称。我已经添加了force参数以覆盖现有文件。'o'参数是输出目录名称。现在使用的是dotnet而不是dnx
截至当前版本,您在project.json中需要的依赖项为:
"dependencies": {
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": {
      "type": "build",
      "version": "1.0.0-preview1-final"
    }
  },

注意: “build”的类型意味着任何引用您的程序集的内容都不会将此DLL作为依赖项,因为它仅用于工具。


另外,值得注意的是,--force标志会覆盖现有文件。 - Jared Beach
而-o是您要输出到的文件夹的名称。通常为“Models”。 - Jared Beach
1
这里是有关此内容的文档链接:https://docs.efproject.net/en/latest/miscellaneous/cli/dotnet.html - BHubbard

3

@ErikEJ开发了一款非常有用的工具,只需在项目上右键单击并提供SQL Server实例即可生成POCO类。您可以从这里下载它,并且步骤在这里清晰地说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接