繁体   English   中英

将连接字符串添加到DBContext(NpgSQL,依赖注入,.NET Core)

[英]Adding connection string to DBContext (NpgSQL, Dependency Injection, .NET Core)

我正在尝试动态加载连接字符串,并将其注入到我的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”的服务。

EF Core有两种初始化DbContext的方法-通过依赖注入或不依赖注入。 您正在使用依赖项注入,因此您的DbContext需要提供一个接受DbContextOptions<TContext>的构造函数( 请参阅此doc链接 ,如上面的@ ivan-stoev所示)。

接受字符串的构造函数仅在依赖项注入之外使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM