我正在尝试动态加载连接字符串并将其注入到我的DbContext继承的类中。我不确定我做的是否正确(无论如何都无法正常工作)。
我的MyDbContext看起来像这样:
public class MyDbContext : DbContext
{
private readonly string _connectionString;
public DbSet<Things> Things{ get; set; }
public MyDbContext (string connectionString)
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_connectionString);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ForNpgsqlUseIdentityColumns();
}
}
我的启动,看起来像这样:
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFrameworkNpgsql()
.AddDbContext<MyDbContext>(s => new MyDbContext("Host=192.168.0.1; Port=4016;Database=Test;Username=test;Password=test"))
.BuildServiceProvider();
services.AddMvc();
services.AddTransient<DbContext, MyDbContext>(s => new MyDbContext("Host=192.168.0.1; Port=4016;Database=Test;Username=test;Password=test"));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<MyDbContext>();
context.Database.Migrate();
}
}
代码在Configure(...)中的行上引发异常:
var context = serviceScope.ServiceProvider.GetRequiredService<MyDbContext>();
例外是:
应用程序启动异常:System.InvalidOperationException:尝试激活“ MyDbContext”时无法解析类型为“ System.String”的服务。
答案 0 :(得分:1)
EF Core有两种初始化DbContext的方法-通过依赖注入或不依赖注入。您正在使用依赖项注入,因此您的DbContext需要提供一个接受DbContextOptions<TContext>
的构造函数({@ {3}},如@ ivan-stoev上面所述)。
接受字符串的构造函数仅在依赖项注入之外使用。