Невозможно создать DbContext без использования OnConfiguring (DbContextOptionsBuilder optionsBuilder) - PullRequest
0 голосов
/ 21 июня 2019

Я занимаюсь разработкой веб-приложения .NET CORE MVC 2.1 с объявленным в DLL DbContext (EF Core 2.1).

Я хотел бы настроить контекст, используя IServiceCollection.AddContext<GladContext>, но если я не ALSO настраивает его DbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) Мне сказали, что Для этого DbContext * 1008 не настроен поставщик базы данных * несмотря на то, что конструктор принимает 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 - мой текущий обходной путь, и это приемлемо, если бы его не было, потому что теперь мне нужно настроить DbContextOptionsBuilder и DbContextOptionsBuilder<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 из DbContextOptionsBuilder<GladContext> или наоборот?

1 Ответ

0 голосов
/ 23 июня 2019

Его конфигурационная часть является переопределением 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)
    { 

    }
}
...