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

标签 c# asp.net entity-framework asp.net-core asp.net5

我有一个网站应用程序。取决于 IsDemoSite在我的 appsettings.json 文件中设置,应用程序使用两个不同的数据库连接字符串之一。 (一个用于我的主站点,另一个用于我们的演示站点。)
我还有一个包含所有 Entity Framework 模型和迁移的类库。
在包管理器控制台中,我将默认项目设置为类库。
Default project setting in Package Manager Console
然后,我可以运行 add-migrationupdate-database该类库上的命令。但关键是:IsDemoSite我的主应用程序的设置决定了这些命令使用的数据库。
包管理器控制台究竟是如何根据当前设置知道我的主应用程序使用什么连接字符串的?我没有运行主应用程序。包管理器控制台不使用主应用程序作为默认项目。它怎么知道要使用哪个连接字符串?

最佳答案

当你运行和 add-migrationupdate-database命令,包管理器控制台将查找您的解决方案的启动项目并将其用作这些命令的“入口点”。
可能在你的Startup.cs里面类,您使用存储在 appsettings.json 中的连接字符串注入(inject)了数据库上下文。
我相信你有这样的事情:

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-migrationupdate-database使用相同的代码来确定它将针对哪个数据库执行,就像您的应用程序被执行以允许此命令运行一样。
这也是您需要在启动项目中安装一些 EntityFramework 包的原因。

关于c# - 包管理器控制台如何知道要使用哪个连接字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68144107/

相关文章:

c# - "Collection was modified"尝试枚举包中的文件时出错

c# - 使用 jQuery 调用 put 方法时出现 WCF 内部服务器错误

c# - 如何为 WCF 服务添加跨域支持

c# - In-Memory HttpServer 如何知道要托管哪个 WebAPI 项目?

c# - JSON Serializer 尝试访问早已消失的 EntityFramework 上下文,以获取我没有要求或不关心的数据

c# - 续 MVC 区域 404 错误。无计可施

c# - 防止字符串中出现西里尔文/希腊文/中文 - C# 4.0

asp.net - 如何在不使用系统 css 但具有自己样式的 asp.net mvc 应用程序中包含静态 html?

c# - LINQ to Entities 不支持 LINQ 表达式节点类型 'Lambda'

wpf - 如何在绑定(bind)到 WPF 中的 float 据类型时禁用浮点验证器?