【发布时间】:2018-03-16 22:05:22
【问题描述】:
我们正在开发一个大型 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 migrations add 和 dotnet ef database update)。
我们在 DbConext 中使用硬编码连接字符串的原因是,当我们使用以下代码时,在执行 dotnet ef 命令时,我们会得到一个未设置为对象异常实例的对象引用。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["StandardDatabase"].ConnectionString);
}
但是,由于我们有一个 Program.cs,如果我们为连接字符串添加一个 Debug.WriteLine 并运行项目,它确实会返回正确的连接字符串,并且如果我们在 appsettings.json 文件中设置连接字符串用户界面,用户界面也将成功连接。
问题: 上面提到的堆栈是我们用于几个“微应用”的,这意味着我们有几个项目连接到几个数据库。我们还想利用 Development、Staging 和 Production 连接字符串。
如果我们使用配置管理器连接字符串,一切对日常操作都有好处;但是,当我们想将实体框架代码用于数据库命令行时,我们需要进入每个要更新的存储库并将 DbContext 更改为硬编码的连接字符串,执行命令,然后在完成后将它们更改回,这变得相当麻烦。
问题: 我们是不是做错了,是否有设置 Entity Framework Core 1.0 堆栈的首选做法,使我们不必手动更改 DbContext,而是全面利用配置文件?
任何方向都将不胜感激!
【问题讨论】:
-
没有MVC6了!!! blogs.msdn.microsoft.com/webdev/2016/01/19/…
-
创建管理连接并返回 Dbcontext 的工厂方法(或工厂类)
-
为什么不使用普通的 ASP.NET Core 配置而不是使用 ConfigurationManager?
-
我最初尝试使用 ASP.NET Core 配置,但在类文件和托管环境中使用它时遇到问题。我在docs.asp.net/en/latest/fundamentals/configuration.html 中使用了指南,但是我没有花太多时间在上面,所以我要再试一次。我在每个存储库中也有一个工作单元,所以也许我会尝试处理那里的连接。
标签: c# asp.net-core entity-framework-core