EF Core 3.1 是否支持 DB First 方法?

Does EF Core 3.1 support DB First approach?

我们正在将 ASP.NET MVC 4.x 应用程序移植到 ASP.NET Core 3.1。当前应用程序正在使用 EF 6.x 数据库优先方法。作为此迁移的一部分,我们将使用 EF Core 3.1 作为当前 EF 6.x 的替代方案。所以问题是:

EF Core 3.1 是否支持 DB First 方法?

如果没有,有哪些选择?我们只剩下代码优先方法了吗?

感谢您的帮助。

是的,EF Core 通过 Scaffold-DbContext 命令首先支持数据库,您也可以使用 EF Core Power Tools。基于 Edmx 的建模不适用于 EF Core,只能使用基于代码的建模。

是的。它从 .NET Core 1.0 到现在都支持 DB First Approach。您需要从 nugets

下载 4
  1. EntityFrameworkCore

  2. EntityFrameworkCore.Design

  3. EntityFrameworkCore.Tools

  4. EntityFrameworkCore.SqlServer

打开工具 > NuGet 包管理器 > 包管理器控制台。并在下面的控制台中输入。

默认:

Scaffold-DbContext "Server=yourserveraddress;Database=yourdatabase;user id=youruser;password=yourpassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context "YourOwnContext"

看到您关于“Scaffold-DbContext 仅创建代码优先模型”的评论。不,Scaffold-DbContext 是数据库优先的方法。

"Creating entity & context classes for an existing database is called Database-First approach."

已编辑

如果你在数据库中有新的更新并且想要更新dbcontext,只需在最后添加-f。它将更新并覆盖您所有的 dbcontext 和模型 classes.

Scaffold-DbContext "Server=yourserveraddress;Database=yourdatabase;user id=youruser;password=yourpassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context "YourOwnContext" -f

如果要在模型class中添加一些数据注释如[Column]等,可以添加-DataAnnotations

Scaffold-DbContext "Server=yourserveraddress;Database=yourdatabase;user id=youruser;password=yourpassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context "YourOwnContext" -DataAnnotations -f

不,不幸的是,不再有数据库优先的方法。

您可以先从现有数据库编写代码。使用已经提到的脚手架命令。

我们做什么:

  • 使用脚手架
  • 创建控制脚手架过程的“脚手架脚本”。 (例如将表格拆分为多个上下文)
  • 创建“脚手架脚本之后”来修复脚手架每次犯的所有错误。 (例如损坏的数据类型)
  • 创建更多“后脚手架脚本”来增强您的模型,但所有脚手架都不支持。 (例如专栏评论)
  • 尽可能使用部分类,避免每次都丢失更改

但总而言之,目前还没有令人满意的解决方案。 请注意,如果您想要一个完美的数据库优先方法,您几乎要重写整个脚手架功能。

代码 First/DB 第一个标题有点误导,但如果您正在寻找基于 EDMX 的解决方案,那么 EF Core 不支持,因为 EF Core 是完全重新设计的 ORM。

相反,您可以使用数据库脚手架根据现有数据库创建上下文 类。

每当数据库发生变化时,您只需再次 运行 相同,这样现有上下文 类 及其定义就会被更新后的数据库覆盖。

听起来像是一个漫长的过程,但如果您正在处理具有独立合同层的分层架构,它比您想象的要容易得多。

https://referbruv.com/blog/posts/database-first-generating-models-from-an-existing-database-using-ef-core