我试图注入IConfiguration迁移(在构造函数中),并得到异常:"没有为此对象定义无参数构造函数."
任何解决方法?
entity-framework dependency-injection ef-migrations entity-framework-core asp.net-core
在使用Entity Framework的迁移命令时,是否可以配置/引导依赖注入?
Entity Framework Core支持DbContext子类的依赖注入.该机制包括允许在数据访问之外配置数据访问DbContext.
例如,以下内容将使用从中检索的连接字符串将EF配置为持久保存到SQL Server config.json
ServiceCollection services = ...
var configuration = new Configuration().AddJsonFile( "config.json" );
services.AddEntityFramework( configuration )
.AddSqlServer()
.AddDbContext<BillingDbContext>( config => config.UseSqlServer() );
Run Code Online (Sandbox Code Playgroud)
但是,迁移命令不知道执行此代码,因此Add-Migration缺少提供程序或缺少连接字符串会失败.
迁移可制成通过覆盖工作OnConfiguring的内DbContext子类来指定供应商和配置字符串,但在不同的配置是其他地方所期望的方式获得.最终保持我的迁移命令和我的代码都工作变得非常复杂.
注意:我的DbContext生活在与使用它的入口点不同的程序集中,我的解决方案有多个启动项目.
c# dependency-injection dbcontext entity-framework-core .net-core
在ASP.NET Core 的早期版本中,我们可以动态添加带有环境后缀的 appsetting.json 文件,就像appsettings.Production.json生产环境一样。
由于结构有点不同,看来配置现在已加载到 class 中Program。但是我们这里没有注入``,所以我自己使用环境变量尝试了:
public class Program {
public static void Main(string[] args) {
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
string envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
string envConfigFile = $"appsettings.{envName}.json";
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(envConfigFile, optional: true);
var finalConfig = config.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://0.0.0.0:5000")
.UseConfiguration(finalConfig)
.UseStartup<Startup>();
}
}
Run Code Online (Sandbox Code Playgroud)
代码已执行,但它不会覆盖我的appsettings.json配置。假设我有以下内容appsettings.json:
{
"MyConnectionString": "Server=xxx,Database=xxx, ..."
}
Run Code Online (Sandbox Code Playgroud)
这个连接字符串正在工作。现在我创建appsettings.Development.json
{
"MyConnectionString": ""
}
Run Code Online (Sandbox Code Playgroud)
并设置ASPNETCORE_ENVIRONMENT=Development. 这肯定会引发异常。但应用程序可以使用来自 …