Entity Framework 数据库优先 .Net Core

Entity Framework Database First .Net Core

我有一个 .Net Standard 2.0 class 库项目,我想向其中添加 Entity Framework。我已将 Entity Framework 核心包添加到项目中,但当我尝试向项目中添加新项时,没有出现 Entity Framework 模板。我在网上看过,但我似乎只能找到 Code First 的说明!

如何恢复数据库优先功能?

EF Core 不会,也永远不会支持设计器基于 EDMX 的数据库优先工作流。 EF Core 将所有对象到数据库的映射存储在属性中,并将 Fluent API 映射存储在源代码中。

在 EF 6 中,术语 "Code First" 意味着两个截然不同的事物。一种是代码优先建模工作流,其中您的数据库是从 .NET 类 生成的。 "Code First" 的另一个含义是映射元数据嵌入到您的源代码中 (Attributes/Fluent API) 而不是 EDMX 文件。 EF 6 支持两种不同 数据库优先工作流。使用 EDMX 的数据库优先,工作流正式称为 "Code First From an Existing Database",但也可以称为 "Database-First with Code-Based Mapping".

在 EF Core 中,您的代码将始终具有映射,因此从这个意义上讲它是 "code first"。但是您仍然可以执行数据库优先的设计工作流程,并编写与现有数据库相匹配的实体和映射代码。

并且您可以使用包管理器控制台中的 scaffold-dbcontext 或 CLI 命令中的 dotnet ef dbcontext scaffold 从现有数据库生成实体 类 和映射元数据。参见 Getting Started with EF Core on ASP.NET Core with an Existing Database

在“.net core”中,您不能从菜单和“添加新项目”按钮使用 EF。

确保安装了“Microsoft.EntityFrameworkCore.Tools”包:

  1. 转到 Tools –> NuGet Package Manager –> Package Manager Console

  2. 运行 Install-Package Microsoft.EntityFrameworkCore.Tools

然后按照以下步骤操作:

  1. 通过示例代码创建连接字符串。 (SQLSERVER,DATABASE,USERNAME,PASS)

    Data Source=SQLSERVER;Initial Catalog=DATABASE;persist security info=True;user id=USERNAME;password=PASS

  2. 编辑示例代码并将上面的代码放在引文中。 (CONECTIONSTRING,FOLDERNAME)

    Scaffold-DbContext "CONECTIONSTRING" Microsoft.EntityFrameworkCore.SqlServer -OutputDir FOLDERNAME

  3. 例如,这是步骤1和2的结果。

    Scaffold-DbContext "Data Source=localhost;Initial Catalog=myDb;persist security info=True;user id=sa;password=0000" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/EF

  4. 运行上面的代码通过Tools –> NuGet Package Manager –> Package Manager Console

More details on the Getting Started with EF Core on ASP.NET Core with an Existing Database

您还可以 reverse engineering 您的数据库架构,根据文档,这意味着:

It is the process of scaffolding entity type classes and a DbContext class based on a database schema. It can be performed using the Scaffold-DbContext command of the EF Core Package Manager Console (PMC) tools or the dotnet ef dbcontext scaffold command of the .NET Command-line Interface (CLI) tools.

然后,如果您已有数据库,则只需使用连接字符串和实际提供程序的 NuGet 包名称执行命令。例如,对于 postgresql 数据库,您将需要下一个命令:

dotnet-ef dbcontext scaffold "Host=localhost;Username=my_user_name;Password=my_pswd;Database=my_db" Npgsql.EntityFrameworkCore.PostgreSQL