我有一个网站应用程序。根据我的
appsettings.json文件中的
IsDemoSite
设置,应用程序使用两个不同的数据库连接字符串之一。 (一个用于我的主网站,另一个用于我们的演示网站。)
我还有一个类库,其中包含所有实体框架模型和迁移。
在包管理器控制台中,我将 默认项目 设置为类库。
然后,我可以在该类库上运行
add-migration
和 update-database
命令。但关键在于:我的主应用程序的 IsDemoSite
设置决定了这些命令使用哪个数据库。
程序包管理器控制台到底如何根据当前设置知道我的主应用程序使用什么连接字符串?我没有运行主应用程序。包管理器控制台未使用主应用程序作为默认项目。它到底怎么知道要使用哪个连接字符串?
当您运行
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));
add-migration
和 update-database
使用相同的代码来确定它将针对哪个数据库执行,就像执行您的应用程序以允许运行此命令一样。
这也是您需要在启动项目中安装一些 EntityFramework 包的原因。
我想知道如果我使用 Visual Studio 2022 中的包管理器控制台,应用程序将使用哪个 appsettings.json。我有
appsettings.json
、appsettings.Development.json
和 appsettings.Production.json
,每个都有不同的连接字符串。
用的是
appsettings.Development.json
。