EF Core 2.0脚手架-dbcontext:在另一个项目中查找连接字符串

11
我正在使用EF Core 2.0 CLI命令“scaffold-dbcontext”从现有数据库(数据库优先)反向工程化poco类。 包含我的appsettings.json文件的项目与包含由scaffold-dbcontext生成的poco类的项目不同。
我该如何让scaffold-dbcontext命令在另一个项目的appsettings.json文件中找到ConnectionString?
4个回答

25

此处所述,现在您可以指定您的连接字符串为命名的格式,例如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;"
}

以简单为主,做到关键时刻的救命稻草。 - nulltron

7

截至撰写本文时,似乎 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命令。

这里有一个很好的链接详细介绍了scaffold-dbcontext命令选项点击此处

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

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

对于dotnet CLI用户,--startup-project--project,文档请参考https://learn.microsoft.com/en-us/ef/core/cli/dotnet#target-project-and-startup-project。 - yzorg

3

对我来说,两个答案都很有用。我想在另一个项目中生成上下文,因此需要指定启动项目并选择要生成上下文的项目。所以我使用了以下命令:

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


0

可以通过在Scaffold-DbContext中使用-StartupProject选项并使启动项目引用Microsoft.EntityFrameworkCore.Design包(唯一的注意事项)来完成。

示例

项目DB:将包含EFCore自动生成的类

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

在程序包管理器控制台中执行

Scaffold-DbContext -Connection“name =<connection string name>”-Provider Oracle.EntityFrameworkCore -OutputDir EFModels -Context<DbContext class name> -Project DB -StartupProject API -Force

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接