1

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

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.

UPDATE Вот мой appsettings.json файл:

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

Мой DbContext:

public class ApplicationUser : IdentityUser { } 

public partial class MyDbContext : IdentityDbContext<ApplicationUser> 
{ 

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

Не могли бы вы поделиться своим контекстом DB? Я хотел бы убедиться, что строка соединения правильно протестирована до EntityFramework. – Pinpoint

+0

Моя строка подключения не в моем dbcontext, это в моем appsettings.json –

+0

Если ваша строка подключения настроена, это не очень важно. Я просто хочу убедиться, что ваш контекст имеет правильный конструктор, чтобы разрешить внешнюю конфигурацию. – Pinpoint

ответ

2

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

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

public partial class MyDbContext : OpenIddictContext<ApplicationUser> { 
    public MyDbContext(DbContextOptions options) 
     : base(options) { 
    } 
} 
+0

Спасибо, друг, я скоро это проведу. –

+0

Проблема, с которой я сталкиваюсь, заключается в том, что ApplicationDbContext не определен, не уверен, как продолжить реализацию этого. –

+0

Ой, плохо скопируйте/вставьте. Конечно, вы должны назвать его своим классом контекста, поскольку он является конструктором. Простите за это. – Pinpoint

Смежные вопросы