不使用 OnConfiguring(DbContextOptionsBuilder optionsBuilder) 无法构建 DbContext

Cannot construct DbContext without using OnConfiguring(DbContextOptionsBuilder optionsBuilder)

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

我想使用 IServiceCollection.AddContext<GladContext> 配置上下文,但如果我不这样做 ALSO 配置它 DbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) 有人告诉我 没有为此 DbContext 配置数据库提供程序,尽管有一个构造函数采用 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<GladContext> 或相反的方式构建 DbContextOptionsBuilder 吗?

它的配置部分是对 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)
    { 

    }
}