繁体   English   中英

如何在 ASP.NET Core 的多个身份中使用单个 DBContext?

[英]How to use single DBContext in multiple identities in ASP.NET Core?

我正在使用 ASP.NET 核心身份开发登录系统。 我有两个身份:客户和会员。 当我尝试注册会员用户时,它会产生 InvalidOperationException。

客户端用户.cs

public class ClientUser : IdentityUser
{

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; } = string.Empty;

    [Required]
    [MaxLength(100)]
    public string LastName { get; set; } = string.Empty;
}

会员用户.cs

public class MemberUser : IdentityUser
    {
        [Required]
        [MaxLength(100)]
        public string MemberFirstName { get; set; } = string.Empty;

        [Required]
        [MaxLength(100)]
        public string MemberLastName { get; set; } = string.Empty;

    }

ClientContext.cs

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


    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

    }
}

程序.cs

var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("RazorPagesPizzaAuthConnection");

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

//builder.Services.AddDbContext<MemberContext>(options =>
//    options.UseSqlServer(connectionString));
builder.Services.AddDefaultIdentity<ClientUser>(options =>
{
    options.SignIn.RequireConfirmedAccount = true;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireLowercase = false;
    options.Password.RequireUppercase = false;

}).AddEntityFrameworkStores<ClientContext>();


builder.Services.AddIdentityCore<MemberUser>()
    .AddRoles<IdentityRole>()
    .AddClaimsPrincipalFactory<UserClaimsPrincipalFactory<MemberUser, IdentityRole>>()
    .AddEntityFrameworkStores<ClientContext>()
    .AddDefaultTokenProviders()
    .AddDefaultUI();

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddTransient<IEmailSender, EmailSender>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

错误:

InvalidOperationException:无法为“MemberUser”创建 DbSet,因为此类型未包含在上下文的 model 中。

不确定,但您能否将 ClientContext 声明为:

public class ClientContext : IdentityDbContext<IdentityUser>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM