是否有实体框架 7 数据库优先 POCO 生成器?

Posted

技术标签:

【中文标题】是否有实体框架 7 数据库优先 POCO 生成器?【英文标题】:Is there an Entity Framework 7 Database-First POCO Generator? 【发布时间】:2015-03-27 12:33:14 【问题描述】:

我一直在使用 Entity Framework 7 和 ASP.NET 5 来处理我正在处理的一个新项目,但我遇到了障碍。我正在工作的团队使用 DBA 优先的开发方法;即数据库由 DBA 设计,然后开发人员更改代码以补偿模型更改。

使用 EF6,这很有效,因为我们可以使用 EDMX 设计器的“更新”功能来更新代码。一键,我们得到了新的类,我们就完成了。但是,在 EF7 中,一切都不同了。没有更多的设计器,我们应该使用 Code-First,根据 EF 团队的一些博客帖子,它也应该支持“Database-First”代码生成。

但是,我无法弄清楚如何在 ASP.NET 5 应用程序中使用 Visual Studio 2015 CTP6 执行此操作。工具支持还在那里,还是我不走运?它甚至会到来吗?

【问题讨论】:

先查找“逆向工程代码” 是的,我花了几天时间搜索。很多关于如何使用 EF6 执行此操作的信息,但使用 EF7 似乎没有办法。目前,我创建了一个 EF6 项目,在那里完成了逆向工程,并将文件复制到我的 EF7 项目中(由于 EF7 中不存在命名空间而进行了一些修改),但从长远来看,我我需要一个更稳定的解决方案。 我认为它们的差异不足以产生如此大的差异。我认为 EF7 仍处于测试阶段,因此可能还没有完全支持它。 github.com/aspnet/EntityFramework/releases 作为对任何读者的警告,这个过程仍然充满了错误。这些答案可能对您有所帮助,但现阶段仍然存在错误,有些人无法使其正常工作。 VS2017 更新:如果您使用的是最新最好的微软产品套件,这里是他们的教程:docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/… 【参考方案1】:

在最新版本中,可以使用 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 命令提示符 我的错……知道了blogs.msdn.com/b/sujitdmello/archive/2015/04/23/…【参考方案2】:

这可以使用 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 或其他相关命令,请按照另一个答案的 cmets 中提到的 THIS 链接。

P.S.:这是当前的命令列表 [在撰写本文时,最后一次更新是 8 月 21 日]:

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

【讨论】:

为 .NET Core RC2 的新语法添加了单独的答案(2016 年 5 月)【参考方案3】:

以下是 .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"
    
  ,

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

【讨论】:

另外,值得注意的是 --force 标志会覆盖现有文件 而 -o 是您要输出到的文件夹的名称。那一般是Models Here 是指向此文档的链接。【参考方案4】:

@ErikEJ 为此开发了一个非常有用的工具。只需右键单击项目即可生成 POCO 类并为您提供 SQL Server 实例。您可以从 here 下载它,并清楚地提到了步骤 here。

【讨论】:

以上是关于是否有实体框架 7 数据库优先 POCO 生成器?的主要内容,如果未能解决你的问题,请参考以下文章

没有主键和空列的表上的实体框架反向 poco

没有行为的实体框架 POCO - 需要重新设计以消除代码异味

将实体框架从数据库优先转换为代码优先

反向 POCO 生成器:如何重命名反向外键?

实体框架 4 代码优先的优缺点 [关闭]

实体框架代码优先:启用迁移错误