我正在将 .NET Core 与 MinimalAPI 和 EntityFramework 8 用于个人项目。为了管理注册和登录,我使用了开箱即用的身份管理。现在,我需要添加一些有关用户和角色之间关系的附加信息,而无需求助于自定义表,但不幸的是,我无法找到这方面的文档。
简而言之,UsersRole 实体应从以下位置转换:
CREATE TABLE [dbo].[UsersRoles](
UserId nvarchar(450) NOT NULL,
RoleId nvarchar(450) NOT NULL,
)
至:
CREATE TABLE [dbo].[UsersRoles](
UserId nvarchar(450) NOT NULL,
RoleId nvarchar(450) NOT NULL,
CustomField1 nvarchar(450) NOT NULL,
CustomField2 nvarchar(450) NOT NULL
)
有人可以帮助我处理这种情况吗? 预先感谢您。
定制模型
public class ApplicationUser : IdentityUser
{
public virtual ICollection<IdentityUserClaim<string>> Claims { get; set; }
public virtual ICollection<IdentityUserLogin<string>> Logins { get; set; }
public virtual ICollection<IdentityUserToken<string>> Tokens { get; set; }
public virtual ICollection<ApplicationUserRole> UserRoles { get; set; }
}
public class ApplicationRole : IdentityRole
{
public virtual ICollection<ApplicationUserRole> UserRoles { get; set; }
}
public class ApplicationUserRole : IdentityUserRole<string>
{
public string CustomField1 { get; set; }
public string CustomField2 { get; set; }
public virtual ApplicationUser User { get; set; }
public virtual ApplicationRole Role { get; set; }
}
应用程序DbContext
public class ApplicationDbContext
: IdentityDbContext<
ApplicationUser, ApplicationRole, string,
IdentityUserClaim<string>, ApplicationUserRole, IdentityUserLogin<string>,
IdentityRoleClaim<string>, IdentityUserToken<string>>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>(b =>
{
b.HasMany(e => e.Claims)
.WithOne()
.HasForeignKey(uc => uc.UserId)
.IsRequired();
// Each User can have many UserLogins
b.HasMany(e => e.Logins)
.WithOne()
.HasForeignKey(ul => ul.UserId)
.IsRequired();
b.HasMany(e => e.Tokens)
.WithOne()
.HasForeignKey(ut => ut.UserId)
.IsRequired();
b.HasMany(e => e.UserRoles)
.WithOne(e => e.User)
.HasForeignKey(ur => ur.UserId)
.IsRequired();
});
modelBuilder.Entity<ApplicationRole>(b =>
{
b.HasMany(e => e.UserRoles)
.WithOne(e => e.Role)
.HasForeignKey(ur => ur.RoleId)
.IsRequired();
});
}
}
程序.cs
builder.Services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ApplicationDbContext>();
参考:添加用户和角色导航属性