Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t从ASP.NET IdentityUserRole中提取具有角色的用户列表_C#_Asp.net_Asp.net Core_Asp.net Web Api_Asp.net Identity - Fatal编程技术网

C# Can';t从ASP.NET IdentityUserRole中提取具有角色的用户列表

C# Can';t从ASP.NET IdentityUserRole中提取具有角色的用户列表,c#,asp.net,asp.net-core,asp.net-web-api,asp.net-identity,C#,Asp.net,Asp.net Core,Asp.net Web Api,Asp.net Identity,我正在尝试获取具有共同响应角色的用户列表。使用IdentityUser、IdentityRole、IdentityUserRole。 我已经尝试了不同的方法,并遵循了StackOverflow的许多答案。 我的主要问题是,当我向用户和角色模型添加导航属性时,在UserRole表中会重复一些列 如果您需要更多信息,请告诉我 但我需要你的帮助 详情: 用户: 公共类用户:IdentityUser { 公共字符串{get;set;} 公共ICollection用户角色{get;set;} } 角色:

我正在尝试获取具有共同响应角色的用户列表。使用IdentityUser、IdentityRole、IdentityUserRole。 我已经尝试了不同的方法,并遵循了StackOverflow的许多答案。 我的主要问题是,当我向用户和角色模型添加导航属性时,在UserRole表中会重复一些列

如果您需要更多信息,请告诉我

但我需要你的帮助

详情: 用户:

公共类用户:IdentityUser
{
公共字符串{get;set;}
公共ICollection用户角色{get;set;}
}
角色:

公共类角色:IdentityRole
{
公共ICollection用户角色{get;set;}
}
用户角色:

    public class UserRole : IdentityUserRole<string>
    {
        public User User { get; set; }
        public Role Role { get; set; }
    }
public类用户角色:IdentityUserRole
{
公共用户{get;set;}
公共角色{get;set;}
}
DbContext:

    public class DataContext : IdentityDbContext<User, Role, string,  IdentityUserClaim<string>,
    UserRole, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>>
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options) {}

    }
公共类DataContext:IdentityDbContext
{
公共DataContext(DbContextOptions选项):基本(选项){}
}
迁移和更新数据库后: 表格AspNetUserRoles:

ps:之前插入的数据

我很沮丧,请帮忙

public class UserRole : IdentityUserRole<string>
{
    public User User { get; set; }
    public Role Role { get; set; }
}
因此,如果覆盖这些关系配置,您应该能够使导航属性正常工作:

public class DataContext : IdentityDbContext<User, Role, string,  IdentityUserClaim<string>, UserRole, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    public DataContext(DbContextOptions<DataContext> options)
        : base(options) {}

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

        builder.Entity<User>(b =>
        {
            b.HasMany<UserRole>(u => u.UserRoles)
                .WithOne(ur => ur.User)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();
        });

        builder.Entity<Role>(b =>
        {
            b.HasMany<UserRole>(r => r.UserRoles)
                .WithOne(ur => ur.Role)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();
        });
    }
}
公共类DataContext:IdentityDbContext
{
公共数据上下文(DbContextOptions)
:base(选项){}
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
builder.Entity(b=>
{
b、 HasMany(u=>u.UserRoles)
.WithOne(ur=>ur.User)
.HasForeignKey(ur=>ur.UserId)
.IsRequired();
});
builder.Entity(b=>
{
b、 HasMany(r=>r.UserRoles)
.WithOne(ur=>ur.Role)
.HasForeignKey(ur=>ur.RoleId)
.IsRequired();
});
}
}
我还没有对此进行测试,但它应该替换默认配置,这样您就不会在
UserRole
上出现重复的列,您的导航属性应该可以正常工作

public class UserRole : IdentityUserRole<string>
{
    public User User { get; set; }
    public Role Role { get; set; }
}
builder.Entity<TUser>(b =>
{
    b.HasMany<TUserRole>().WithOne().HasForeignKey(ur => ur.UserId).IsRequired();
});

builder.Entity<TRole>(b =>
{
    b.HasMany<TUserRole>().WithOne().HasForeignKey(ur => ur.RoleId).IsRequired();
});
public class DataContext : IdentityDbContext<User, Role, string,  IdentityUserClaim<string>, UserRole, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    public DataContext(DbContextOptions<DataContext> options)
        : base(options) {}

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

        builder.Entity<User>(b =>
        {
            b.HasMany<UserRole>(u => u.UserRoles)
                .WithOne(ur => ur.User)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();
        });

        builder.Entity<Role>(b =>
        {
            b.HasMany<UserRole>(r => r.UserRoles)
                .WithOne(ur => ur.Role)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();
        });
    }
}