我正在扩展 IdentityUserRole 以拥有另一个名为WorkspaceId的主键/外键 Id 字段。
我收到此错误:“'ApplicationUserRole' 在属性 'WorkspaceId' 上不能有 KeyAttribute,因为主键只能在根类型上声明”
这是我的 ApplicationUserRole 类:
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 的 PK/FK 和 WorkspaceId PK/FK 的表似乎有点矫枉过正。这意味着我需要维护两个表。
另外,我正在使用 .net Core 1.1
更新 1
迁移时出现以下错误:
“Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`4[TUser,TRole,TContext,TKey]”上的“Models.ApplicationUser”违反了“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>()