首页 > 解决方案 > 不使用 OnConfiguring(DbContextOptionsBuilder optionsBuilder) 无法构造 DbContext

问题描述

我正在开发一个 .NET CORE MVC 2.1 Web 应用程序,它在 DLL (EF Core 2.1) 中声明了一个 DbContext。

我想使用IServiceCollection.AddContext<GladContext> 配置上下文,但如果我不配置它,我会被告知没有为此 DbContext 配置数据库提供程序,尽管有一个构造函数采用DbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder)DbContextOptions<GladContext>

    public GladContext(DbContextOptions<GladContext> options, IGladConnectionStringProvider connectionStringProvider) : base(options)
    {
        _connectionStringProvider = connectionStringProvider;
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        GladOptionsBuilderHelper.ConfigureDefaultOptionsBuilder(optionsBuilder, _connectionStringProvider.ConnectionString);
        base.OnConfiguring(optionsBuilder);
    }

IGladConnectionStringProvider是我目前的解决方法,如果不是因为我现在需要同时配置DbContextOptionsBuilderDbContextOptionsBuilder<GladContext>

public static class GladOptionsBuilderHelper
{

    public const string GladMigrationsHistory = "__GladMigrationsHistory";
    public static DbContextOptionsBuilder<GladContext> CreateDefaultTypedOptionsBuilder(string connectionString) 
    {

        var optionsBuilder = new DbContextOptionsBuilder<GladContext>();

        optionsBuilder
            .UseSqlServer(connectionString, options =>
            {
                options.EnableRetryOnFailure();
                options.MigrationsHistoryTable(GladMigrationsHistory, EntityBase.SchemaName);
            })
            .ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));

        return optionsBuilder;
    }


    public static void ConfigureDefaultOptionsBuilder(DbContextOptionsBuilder optionsBuilder, string connectionString)
    {
        optionsBuilder
            .UseSqlServer(connectionString, options =>
            {
                options.EnableRetryOnFailure();
                options.MigrationsHistoryTable(GladMigrationsHistory, EntityBase.SchemaName);
            })
            .ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));

    }
}

DbContextOptionsBuilder<GladContext>用于_IDesignTimeDbContextFactory<GladContext>

你能告诉我如何使用AddContext来配置GladContext或如何DbContextOptionsBuilder从 aDbContextOptionsBuilder<GladContext>或其他方式构造 a 吗?

标签: entity-frameworkef-core-2.1

解决方案


它的配置部分是对 IServiceCollection.AddDbContext() 的覆盖。

因此,当您调用 AddDbContext 时,只需将您的选项添加到括号中,如下所示:

var connectionString = "CONNECTION-STRING-HERE";

services.AddDbContext<MyContext>(o => o
                .UseSqlServer(connectionString)
                .UseQueryTrackingBehavior(true)
                .EnableSensitiveDataLogging(true));



public class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    public MyContext(DbContextOptions<MyContext> options) : base(options)
    { 

    }
}

推荐阅读