自定义IdentityUserRole主键



我正在使用ASP。. NET身份提供程序和EF 6代码首先,我创建了一个自定义的IdentityUserRole表,其中有一个额外的列OrganisationId。自定义表名为UserRole。

表当前有UserIdRoleId的默认主键。

我想在IdentityUserRole表的主键中包含organizationid列。

我可以看到UserRole表在我的数据库,这是一个被用于用户角色(没有aspnet_userrole表和表有数据,当我分配一个角色给用户)

我试过了:

modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(x => new { x.UserId, x.RoleId }); 

但是它没有显示OrganisationId属性。

所以我试了:

modelBuilder.Entity<UserRole>().HasKey(x => new { x.OrganisationId, x.RoleId, x.UserId });

但是当我添加迁移时,Up和Down方法都是空的。

更新(部分代码)

IdentityUserRole类:

public class UserRole : IdentityUserRole, IOrganisationEntity
{
    [Key]
    public int OrganisationId { get; set; }
    [ForeignKey("OrganisationId")]
    public Organisation Organisation { get; set; }
}

DbContext继承自IdentityDbContext<User>

User继承自IdentityRebootUser

更新2

这是新的DbContext:

public class MyDbContext : IdentityDbContext<User, Role, string, 
                             IdentityUserLogin, UserRole, IdentityUserClaim>

这是我的新用户类:

public class User : IdentityRebootUser<string, IdentityUserLogin, 
                        Role, IdentityUserClaim>

和Role类:

public class Role : IdentityRole<string, UserRole>
然而,这给了我以下错误:

mynamspace . model . entities。"用户"不能用作类型泛型类型或方法中的参数'TUser''Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext<TUser,> '

更新3

我去掉了IdentityReboot。我创建了自己的User对象,它具有以下签名:

public class User : IdentityUser<string, IdentityUserLogin, 
                        UserRole, IdentityUserClaim>

我现在可以修改UserRole表来添加一个额外的PK,这就是我想要的。

我现在的问题是,我不能使用默认的UserStore,因为当我告诉它使用我的自定义'User'表时,我得到以下错误:

没有从' mysql . model . entities '的隐式引用转换。用户'到'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'。

所以我实现了我自己的IUserStore版本,它正在生成异步错误。

如果有一种方法可以在我的自定义User对象中使用UserStore,我将非常高兴。

您需要自定义所有标识对象以指定不同的键。网上有各种各样的教程,但我发现最好的是www.asp.net。

本质上,您需要为每个对象创建自己的版本,但从更复杂的版本继承。例如,而不是:

public class ApplicationUser : IdentityUser
{
    ...
}

你可以这样做:

public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, 
CustomUserClaim> 
{ 
    ...
}

并重复所有对象,包括UserStore, UserManager, RoleManager等

相关内容

  • 没有找到相关文章

最新更新