我们正在开发一个非常大的 ASP.NET Core MVC 1.0 应用程序。我们的每个应用程序都有 4 层,如下所示:
- DTO
- 存储库(实体框架 - 代码优先)
- 服务(业务逻辑)
- MVC(UI-MVC)
目前,在我们处理所有数据库操作的存储库中,我们在 DbContext 中对数据库连接字符串进行了硬编码,如下所示:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
optionsBuilder.UseSqlServer("Data Source=somedatabase.database.windows.net;Initial Catalog=database;Integrated Security=False;User ID=username;Password=password;Connect Timeout=60;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=true");
}
该项目作为独立的 ASP.NET Core 1.0 项目位于 MVC 项目之外。它还有一个空的 Program.cs 文件,似乎需要执行代码到数据库命令行(dotnet ef 迁移添加和 dotnet ef 数据库更新)。
我们在 DbConext 中有硬编码连接字符串的原因是,当我们使用以下代码时,在执行 dotnet ef 命令时,我们会得到一个未设置到对象实例的对象引用异常。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["StandardDatabase"].ConnectionString);
}
但是,由于我们有一个 Program.cs,如果我们为连接字符串添加 Debug.WriteLine 并运行该项目,它确实会返回正确的连接字符串,并且如果我们在 UI 中的 appsettings.json 文件中设置连接字符串, UI 也将成功连接。
问题:上面提到的堆栈是我们用于多个“微型应用程序”的堆栈,这意味着我们有多个连接到多个数据库的项目。我们还希望利用开发、登台和生产连接字符串。
如果我们使用配置管理器连接字符串,那么日常操作一切都很好;但是,当我们想要将实体框架代码用于数据库命令行时,我们需要进入要更新的每个存储库并将 DbContext 更改为硬编码连接字符串,执行命令,然后将它们更改回完成时的状态,这就变得相当麻烦了。
问题:我们是否只是做错了,是否有设置 Entity Framework Core 1.0 堆栈的首选实践,它允许我们不必手动更改 DbContext,而是全面利用配置文件?
任何方向将不胜感激!