Blazor Server + EF Core 7 + Idenitty --> использование пользовательского DbContext и DbContextFactory

Вопрос простой: как я могу сделать свой собственный контекст, используя идентификатор. Я не хочу использовать ApplicationDbContext по умолчанию.

В Program.cs по умолчанию у вас есть:

      var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));

Когда я меняю это, чтобы использовать

      var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
void BuildOptions(DbContextOptionsBuilder options) => options.UseSqlServer(connectionString).EnableSensitiveDataLogging(); // todo: not for production

builder.Services.AddDbContext<OpmContext>(BuildOptions);
builder.Services.AddDbContextFactory<OpmContext>(BuildOptions);

builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<OpmContext>();

и измените свой собственный DbContext, чтобы он наследовал IdentityContext:

      public class OpmContext : IdentityDbContext 
{
    public OpmContext(DbContextOptions<OpmContext> options) : base(options)
    {
    }
}

Я получил:

System.AggregateException: 'Некоторые службы не могут быть созданы (ошибка при проверке дескриптора службы'ServiceType: Microsoft.EntityFrameworkCore.IDbContextFactory`1[Foo.Bar.Data.OpmContext] Срок службы: Singleton

Я просмотрел Использование Identity с AddDbContextFactory в Blazor, но не могу заставить его работать. Какие-либо предложения?

Цель состоит в том, чтобы ввести и использоватьIDbContextFactory<OpmContext> DbFactoryв razor pages или собственных сервисах.

1 ответ

Изменить порядок:

      builder.Services.AddDbContextFactory<OpmContext>(options =>
    options.UseSqlServer(connectionString));

builder.Services
    .AddDbContext<OpmContext>(options =>
        options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<OpmContext>();
Другие вопросы по тегам