c# - 从 application.json 获取连接字符串
问题描述
我有用于实体和迁移的 .Infrastructure 项目以及带有application.json
文件的 .Web 项目,其中我有连接字符串
在基础设施项目中,我必须ApplicationContextFactory
运行迁移
这是代码
public class ApplicationContextFactory: IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
optionsBuilder.UseSqlServer(connectionString);
return new ApplicationDbContext(optionsBuilder.Options);
}
}
该字符串不起作用,因为 application,json 文件位于 .Web 项目中。
.SetBasePath(Directory.GetCurrentDirectory())
这是我的解决方案结构
我如何从中获取连接字符串?
解决方案
具体来说,IDesignTimeDbContextFactory
是针对类库之类的东西进行迁移,其中不涉及启动项目。如果您在迁移时可以使用显式启动项目,请查看@poke 的答案,并摆脱您的工厂,因为您不需要它。
然而,如果你想继续走这条路,你应该意识到,正如它的名字所示,这是“设计时间”,即开发。因此,从配置中获取连接字符串并没有真正意义,因为它始终是您的开发数据库。这就是为什么文档只是明确引用这个连接字符串的原因。不知道为什么每个开发人员似乎都认为他们需要在此问题上对微软进行第二次猜测。
它甚至不应该在团队环境中真正构成问题。如果您使用本地MSSQLLocalDb
实例,并且您的所有开发人员都在使用 Visual Studio,那么连接字符串实际上与开发人员无关。或者,如果您在容器中启动 SQL Server 实例,那么每个开发人员都将使用相同的容器设置。
如果在某些情况下您需要允许开发人员特定的连接字符串,那么您可以为此使用配置。但是,您应该只是点击用户机密,并且您仍然不需要appsettings.json
在您的 Web 项目中访问。
推荐阅读
- visual-studio-code - vscode 打不开“o”
- java - 如何在不使用 getYear() 的情况下比较流中的年份?
- java - 借助 BottomNavigationBar 在片段之间滑动
- android - Play 管理中心 2021 促进从 Beta 版到正式版的发布缺失
- reactjs - reactjs paypal-buttons-v2未捕获错误:检测到从DOM中删除的容器元素
- kotlin - (Kotlin)如何通过反射执行 lambda () -> Unit like function parameter
- google-sheets - Google 表格 ImportXML - 错误:“导入的内容为空。”
- python - Python:如何在没有 OpenCV 的情况下水平连接图像?
- firebase - 清除所有站点数据(或应用程序的新用户)时,Firebase 存储上传不起作用
- .net - 如何在没有 Visual Studio 的情况下安装 Xamarin SDK(在 Ubuntu 上)