包管理器控制台如何知道要使用哪个连接字符串?

Jon*_*ood 5 c# asp.net entity-framework asp.net-core asp.net5

我有一个网站应用程序。根据appsettings.jsonIsDemoSite文件中的设置,应用程序使用两个不同的数据库连接字符串之一。(一个用于我的主网站,另一个用于我们的演示网站。)

我还有一个类库,其中包含所有实体框架模型和迁移。

在包管理器控制台中,我将默认项目设置为类库。

包管理器控制台中的默认项目设置

然后,我可以在该类库上运行add-migration和命令。update-database但关键在于:IsDemoSite我的主应用程序的设置决定了这些命令使用哪个数据库。

包管理器控制台到底如何根据当前设置知道我的主应用程序使用什么连接字符串?我没有运行主应用程序。包管理器控制台未使用主应用程序作为默认项目。它到底如何知道要使用哪个连接字符串?

And*_*osa 4

当您运行和add-migration/或update-database命令时,包管理器控制台将查找解决方案的启动项目并将其用作这些命令的“入口点”。

可能在您的Startup.cs类中,您使用存储在 appsettings.json 中的连接字符串注入了数据库上下文。

我相信你也有这样的经历:

string connectionString;

bool isDemoSite = configuration.GetValue<string>("IsDemoSite");

if(isDemoSite)
    connectionString = configuration.GetConnectionString("mainSite");
else
    connectionString = configuration.GetConnectionString("demoSite");

services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));
Run Code Online (Sandbox Code Playgroud)

add-migrationupdate-database使用相同的代码来确定它将针对哪个数据库执行,就像您的应用程序被执行以允许运行此命令一样。

这也是您需要在启动项目中安装一些 EntityFramework 包的原因。