将主键列添加到标识用户角色表



我正在扩展IdentityUserRole以具有另一个称为WorkspaceId的主键/外键Id字段。

我收到此错误:"'应用程序用户角色'不能在属性'WorkspaceId'上具有键属性,因为主键只能在根类型上声明">

这是我的应用程序用户角色类:

public partial class ApplicationUserRole: IdentityUserRole<string>
{
[Key, ForeignKey("WorkspaceId")]
public string WorkspaceId { get; set; }
public virtual Workspace Workspace { get; set; }
}

在 DbContext 中,我正在做:

modelBuilder.Entity<ApplicationUserRole>(entity =>
{
entity.HasKey(k => new { k.RoleId, k.WorkspaceId, k.UserId });
entity.HasOne(r => r.Workspace).WithMany();
});

向我的 UserRoles 表添加主键的最佳方法是什么,或者,只创建另一个表更好、更安全?对我来说,拥有另一个包含来自 IdentityUserRole 和 WorkspaceId PK/FK 的 PK/FK 的表似乎有点矫枉过正。这意味着我需要维护两个表。

另外,我正在使用.net Core 1.1

更新 1

在审查和实施调查结果时:这里和这里

迁移时出现以下错误:

'Models.ApplicationUser', on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore'4[TUser,TRole,TContext,TKey]' 违反了类型'TUser'的约束

这是我的应用程序用户

public class ApplicationUser : IdentityUser<string, ApplicationUserClaim, ApplicationUserRole, ApplicationUserLogin>

这是我的用户存储:

public class ApplicationUserStore : UserStore<ApplicationUser, ApplicationRole, ApplicationDbContext, string, ApplicationUserClaim, ApplicationUserRole, ApplicationUserLogin, ApplicationUserToken, ApplicationRoleClaim>

这是我在启动中的代码:

services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext, string>()
.AddDefaultTokenProviders()
.AddUserStore<ApplicationUserStore>()
.AddRoleStore<ApplicationRoleStore>();

services.AddScoped<UserStore<ApplicationUser, ApplicationRole, AsherDbContext, string, ApplicationUserClaim, ApplicationUserRole, ApplicationUserLogin, ApplicationUserToken, ApplicationRoleClaim>, ApplicationUserStore>();           
services.AddScoped<RoleManager<ApplicationRole>>();
services.AddScoped<SignInManager<ApplicationUser>>();

以下是我的身份模型:

public class ApplicationUserRole : IdentityUserRole<string>
public class ApplicationUserClaim : IdentityUserClaim<string>
public class ApplicationUserLogin : IdentityUserLogin<string>
public class ApplicationRoleClaim : IdentityRoleClaim<string> 
public class ApplicationUserToken : IdentityUserToken<string>
public class ApplicationRole : IdentityRole<string, ApplicationUserRole, ApplicationRoleClaim>

更新 2删除以下行修复了约束冲突错误:

.AddEntityFrameworkStores<AsherDbContext, string>()

ApplicationUserRole 派生自模型中已包含的 IdentityUserRole,因此需要在其上配置密钥,因为它是基类。默认情况下,IdentityDbContext 将其密钥配置为 {UserId, RoleId}。

这里回答了同样的问题:

自定义标识用户角色主键

相关内容

  • 没有找到相关文章

最新更新