EF Core 2.0 scaffold-dbcontext 在另一个项目中查找ConnectionString

EF Core 2.0 scaffold-dbcontext Find ConnectionString in another project

我正在使用 EF Core 2.0 CLI 命令 scaffold-dbcontext 从现有数据库(首先是数据库)对 poco 类 进行逆向工程。包含我的 appsettings.json 文件和 ConnectionString 的项目不同于包含 scaffold-dbcontext 生成的 poco 类 的项目。

如何让 scaffold-dbcontext 命令在另一个项目的 appsettings.json 文件中找到 ConnectionString?

截至本文 post 时,scaffold-dbcontext 命令似乎不支持 appsettings.json 连接字符串查找。换句话说,您必须使用 scaffold-dbcontext cli 语法显式键入完整的连接字符串:

Scaffold-DbContext -Connection "Server=(localdb)\ProjectsV13;Database=MyDbName;Trusted_Connection=True;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyDbContextName" -DataAnnotations -Force -Project MyEntitiesProject -StartupProject MyEntitiesProject

与 OP 没有直接关系,但只是作为明智的一句话...使用 StartupProject 选项很有帮助,因此您不必在 Visual Studio 中切换启动项目到您的实体项目(例如 MyEntitiesProject),以便 运行 scaffold-dbcontext 命令。

有一篇很好的 link 详细介绍了 scaffold-dbcontext 命令选项 here

另外请务必在您的项目中安装以下包,以便在 nuget 包管理器控制台中使用 scaffold-dbcontext 命令:

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.Design

this 中所述,您现在可以指定要命名的连接字符串,类似于 name=MyConnectionString。您的连接字符串的名称与您 appsettings.json 中定义的名称相对应。示例:

Scaffold-DbContext  -Connection name=MyDB -Provider Microsoft.EntityFrameworkCore.SqlServer

appsettings.json 你有这样的东西:

"ConnectionStrings": {
    "MyDB": Server=mydb.database.windows.net;Database=mydb;Trusted_Connection=True;Encrypt=True;"
}

可以通过在 Scaffold-DbContext 中使用 -StartupProject 选项并使启动项目引用 Microsoft.EntityFrameworkCore.Design 包(仅警告)来完成。

例子

Project DB:将包含 EFCore 自动生成的 classes

项目 API:包含 appsettings.json 和连接字符串(必须引用 Microsoft.EntityFrameworkCore.Design)

在包管理器控制台中执行

Scaffold-DbContext -Connection "name=" -Provider Oracle.EntityFrameworkCore -OutputDir EFModels -Context -Project DB -StartupProject API-力

[如果出现问题,您可以使用 -Verbose 选项进行详细记录]

对我来说,这两个答案都很有用。我想在另一个项目中生成上下文,因此需要指定启动项目和 select 我必须生成上下文的项目。所以我使用:

Scaffold-DbContext -Connection name=DefaultConnectionString -OutputDir DataModel -StartupProject NameofTheProject.API Microsoft.EntityFrameworkCore.SqlServer