Настроить DbContext для OpenIddict

Я использую OpenIddict для аутентификации токена JWT в своем приложении .NET Core. Я следил за этим руководством, но теперь получаю следующая ошибка:

InvalidOperationException: No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider...

Мой метод ConfigureServices в Startup.cs:

        public void ConfigureServices(IServiceCollection services)
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json");
        Configuration = builder.Build();

        services.AddEntityFrameworkSqlServer()
             .AddDbContext<MyDbContext>(options =>
                 options.UseSqlServer(Configuration["Data:MyDbContext:ConnectionString"]));

        services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<MyDbContext>()
            .AddDefaultTokenProviders()
            .AddOpenIddictCore<Application>(config => config.UseEntityFramework());

        services.AddMvc();

        // for seeding the database with the demo user details
        //services.AddTransient<IDatabaseInitializer, DatabaseInitializer>();
        services.AddScoped<OpenIddictManager<ApplicationUser, Application>, CustomOpenIddictManager>();
    }

Не уверен, что с этим делать, так как я не могу добавить DbContext при использовании AddIdentity.

Моя строка подключения в порядке, все работало до добавления OpenIddict.

ОБНОВЛЕНИЕ Вот мой файл appsettings.json:

    {
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "my connection string"
    },
    "SaleboatContext": {
      "ConnectionString": "my connection string"
    }
  }
}

Мой ДбКонтекст:

public class ApplicationUser : IdentityUser { }

public partial class MyDbContext : IdentityDbContext<ApplicationUser>
{

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
}

person barnacle.m    schedule 04.05.2016    source источник
comment
Не могли бы вы поделиться своим контекстом БД? Я хотел бы убедиться, что строка подключения правильно передана в EntityFramework.   -  person Kévin Chalet    schedule 04.05.2016
comment
Моя строка подключения находится не в моем dbcontext, а в моем appsettings.json   -  person barnacle.m    schedule 09.05.2016
comment
Где настроена ваша строка подключения, не очень важно. Я просто хочу убедиться, что в вашем контексте есть правильный конструктор, позволяющий выполнять внешнюю настройку.   -  person Kévin Chalet    schedule 09.05.2016


Ответы (1)


Из-за изменения дизайна в EntityFramework Core RC2 теперь вам нужно выполнить поток DbContextOptions вручную или настроить строку подключения непосредственно в OnModelCreating.

Попробуйте добавить этот конструктор в контекст вашей БД (который должен быть получен из OpenIddictContext):

public partial class MyDbContext : OpenIddictContext<ApplicationUser> {
    public MyDbContext(DbContextOptions options)
        : base(options) {
    }
}
person Kévin Chalet    schedule 09.05.2016
comment
Спасибо друг, скоро проверю - person barnacle.m; 09.05.2016
comment
Проблема, с которой я столкнулся, заключается в том, что ApplicationDbContext не определен, и я не уверен, как это реализовать. - person barnacle.m; 10.05.2016
comment
Упс, неудачная копия/вставка. Конечно, вы должны назвать его своим классом контекста, так как это конструктор. Простите за это. - person Kévin Chalet; 10.05.2016
comment
Это сработало, спасибо. Я не думаю, что вы хотите потратить несколько минут, чтобы помочь новичку в .net core преодолеть некоторые трудности роста? - person barnacle.m; 10.05.2016
comment
Если у вас есть вопросы, не стесняйтесь задавать их на SO, используя тег asp.net-core, и я посмотрю;) - person Kévin Chalet; 10.05.2016