【发布时间】:2015-05-20 12:57:17
【问题描述】:
在使用 Entity Framework 的迁移命令时,是否可以配置/引导依赖注入?
Entity Framework Core 支持 DbContext 子类的依赖注入。此机制包括允许在DbContext 之外配置数据访问。
例如,以下将配置 EF 以使用从 config.json 检索的连接字符串持久保存到 SQL 服务器
ServiceCollection services = ...
var configuration = new Configuration().AddJsonFile( "config.json" );
services.AddEntityFramework( configuration )
.AddSqlServer()
.AddDbContext<BillingDbContext>( config => config.UseSqlServer() );
但是,迁移命令不知道要执行此代码,因此Add-Migration 将因缺少提供程序或缺少连接字符串而失败。
可以通过在 DbContext 子类中覆盖 OnConfiguring 来指定提供程序和配置字符串来进行迁移,但是当其他地方需要不同的配置时,这会妨碍迁移。最终让我的迁移命令和我的代码都能正常工作变得非常复杂。
注意:我的 DbContext 与使用它的入口点位于不同的程序集中,并且我的解决方案有多个启动项目。
【问题讨论】:
-
解决这个问题是问题#639 的一部分。在 ASP.NET 5 中,我们将调用
Startup.ConfigureServices()。在您看来,对非 ASP.NET 5 项目使用相同的约定会更好吗? -
@bricelam 现在我已经在 ASP.NET 5 中进行了一些开发(在传统的 .NET 应用程序中使用 EF7),我可以说围绕
Startup类进行标准化对我来说听起来不错。 -
我在aspnet/Hosting#286 中推动了它,但输了。决定是为不同的应用程序类型使用不同的 DbContext 加载器。见aspnet/EntityFramework#2357。
标签: c# dependency-injection .net-core entity-framework-core dbcontext