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

Sco*_*are 1 entity-framework .net-core ef-core-2.0

我正在使用EF Core 2.0 CLI命令scaffold-dbcontext从现有数据库(数据库优先)中反向工程poco类。包含带有ConnectionString的 appsettings.json文件的项目与保存由scaffold-dbcontext生成的poco类的项目不同。

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

小智 8

正如指出这个你现在可以指定被命名为您的连接字符串,它看起来像name=MyConnectionString。您的连接字符串的名称与您的中定义的名称相对应appsettings.json。例:

Scaffold-DbContext  -Connection name=MyDB -Provider Microsoft.EntityFrameworkCore.SqlServer
Run Code Online (Sandbox Code Playgroud)

在那里appsettings.json,你有这样的事情:

"ConnectionStrings": {
    "MyDB": Server=mydb.database.windows.net;Database=mydb;Trusted_Connection=True;Encrypt=True;"
}
Run Code Online (Sandbox Code Playgroud)


Sco*_*are 6

截至本文发布时,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
Run Code Online (Sandbox Code Playgroud)

与 OP 没有直接关系,但正如智者所说......使用该StartupProject选项很有帮助,因此您不必将 Visual Studio 中的启动项目切换到您的实体项目(例如,MyEntitiesProject)才能运行scaffold-dbcontext 命令。

有一个很好的链接详细介绍了脚手架的DbContext命令选项在这里

还要确保在项目中安装了以下包,以便在 nuget 包管理器控制台中使用 scaffold-dbcontext 命令:

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.Design
Run Code Online (Sandbox Code Playgroud)