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>();