我该如何让scaffold-dbcontext命令在另一个项目的appsettings.json文件中找到ConnectionString?
如此处所述,现在您可以指定您的连接字符串为命名的格式,例如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 命令不支持使用 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
--startup-project
和--project
,文档请参考https://learn.microsoft.com/en-us/ef/core/cli/dotnet#target-project-and-startup-project。 - yzorg对我来说,两个答案都很有用。我想在另一个项目中生成上下文,因此需要指定启动项目并选择要生成上下文的项目。所以我使用了以下命令:
Scaffold-DbContext -Connection name=DefaultConnectionString -OutputDir DataModel -StartupProject NameofTheProject.API Microsoft.EntityFrameworkCore.SqlServer
可以通过在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选项进行详细记录】