Asp.net 实体框架6.4-多对多关系返回新的空列表而不是数据

Asp.net 实体框架6.4-多对多关系返回新的空列表而不是数据,asp.net,entity-framework-6,Asp.net,Entity Framework 6,所以我肯定这是一个愚蠢的错误,我忽略了,但我找不到它。 我正在尝试映射实体框架的多对多关系,但是当初始化器中的一切都成功运行时,角色属性只返回一个新的空列表,而不从数据库加载数据 如果我在数据初始值设定项处放置一个断点,则一切正常,应用程序用户具有角色,角色知道应用程序用户 当在数据库本身中进行验证时,所有数据都是正确的,并且显示了它应该是怎样的。但是,当我继续代码并到达控制器时,ApplicationUser中不存在(用户)角色,而UserRoles中也不存在UserRoles 我有一个角色、

所以我肯定这是一个愚蠢的错误,我忽略了,但我找不到它。 我正在尝试映射实体框架的多对多关系,但是当初始化器中的一切都成功运行时,
角色
属性只返回一个新的空列表,而不从数据库加载数据

如果我在
数据初始值设定项
处放置一个断点,则一切正常,
应用程序用户
具有
角色
,角色知道
应用程序用户

当在数据库本身中进行验证时,所有数据都是正确的,并且显示了它应该是怎样的。但是,当我继续代码并到达控制器时,
ApplicationUser
中不存在(用户)角色,而
UserRoles
中也不存在
UserRoles

我有一个
角色
用户角色
应用程序用户
,多对多关系映射到我的
用户角色配置

public class UserRepository : IUserRepository
{
    private readonly ApplicationDbContext _context;
    private readonly DbSet<ApplicationUser> _users;

    public UserRepository(ApplicationDbContext context)
    {
        _context = context;
        _users = context.ApplicationUser;
    }

    public ApplicationUser GetByMailAndPassword(string email, string password)
    {
        return _users.Include(i => i.Role).FirstOrDefault(u => u.Email == email && u.Password == password);
    }

    public ApplicationUser GetByUsernameAndPassword(string username, string password)
    {
        return _users.Include(i => i.Role).FirstOrDefault(u => u.UserName == username && u.Password == password);
    }

    public void NewUser(ApplicationUser user)
    {
        _users.Add(user);
    }

    public void SaveChanges() 
    {
        _context.SaveChanges();
    }
}
应用程序用户

public class ApplicationUser
{
    #region Properties
    public int Id { get; set; }

    public ICollection<UserRole> Role { get; private set; }
    #endregion

    #region Constructor

    public ApplicationUser() 
    {
        Role = new HashSet<UserRole>();
    }

    public bool ContainsRole(RoleEnums role)
    {
        return Role.Any(r => r.Role.RoleEnum == role);
    }
    #endregion
}
公共类应用程序用户
{
#区域属性
公共int Id{get;set;}
公共ICollection角色{get;private set;}
#端区
#区域构造函数
公共应用程序用户()
{
Role=newhashset();
}
公共bool ContainsRole(RoleEnums角色)
{
返回Role.Any(r=>r.Role.RoleEnum==Role);
}
#端区
}
用户角色配置

public class UserRoleConfiguration : IEntityTypeConfiguration<UserRole>
{
    public void Configure(EntityTypeBuilder<UserRole> builder)
    {
        builder.ToTable("UserRoles");
        builder.HasKey(k => new { k.RoleId, k.ApplicationUserId });
        builder.HasOne(k => k.Role).WithMany(k => k.UserRoles).HasForeignKey(k => k.RoleId).IsRequired().OnDelete(DeleteBehavior.Cascade);

        builder.HasOne(k => k.User).WithMany(k => k.Role).HasForeignKey(k => k.ApplicationUserId).IsRequired().OnDelete(DeleteBehavior.Cascade);
    }
}
public class UserConfiguration : IEntityTypeConfiguration<ApplicationUser>
{
    public void Configure(EntityTypeBuilder<ApplicationUser> builder)
    {
        builder.ToTable("User");
        builder.HasKey(u => u.Id);
        builder.HasMany(u => u.Role).WithOne(u => u.User).HasForeignKey(u => u.ApplicationUserId);
    }
}
public class RoleConfiguration : IEntityTypeConfiguration<Role>
{
    public void Configure(EntityTypeBuilder<Role> builder)
    {
        builder.ToTable("Roles");
        builder.HasKey(r => r.Id);
        builder.HasMany(e => e.UserRoles).WithOne(e => e.Role).HasForeignKey(e => e.RoleId);
    }
}
公共类UserRoleConfiguration:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
builder.ToTable(“用户角色”);
HasKey(k=>new{k.RoleId,k.applicationserid});
HasOne(k=>k.Role).WithMany(k=>k.UserRoles).HasForeignKey(k=>k.RoleId).IsRequired().OnDelete(DeleteBehavior.Cascade);
HasOne(k=>k.User).WithMany(k=>k.Role).HasForeignKey(k=>k.applicationserid).IsRequired().OnDelete(DeleteBehavior.Cascade);
}
}
用户配置

public class UserRoleConfiguration : IEntityTypeConfiguration<UserRole>
{
    public void Configure(EntityTypeBuilder<UserRole> builder)
    {
        builder.ToTable("UserRoles");
        builder.HasKey(k => new { k.RoleId, k.ApplicationUserId });
        builder.HasOne(k => k.Role).WithMany(k => k.UserRoles).HasForeignKey(k => k.RoleId).IsRequired().OnDelete(DeleteBehavior.Cascade);

        builder.HasOne(k => k.User).WithMany(k => k.Role).HasForeignKey(k => k.ApplicationUserId).IsRequired().OnDelete(DeleteBehavior.Cascade);
    }
}
public class UserConfiguration : IEntityTypeConfiguration<ApplicationUser>
{
    public void Configure(EntityTypeBuilder<ApplicationUser> builder)
    {
        builder.ToTable("User");
        builder.HasKey(u => u.Id);
        builder.HasMany(u => u.Role).WithOne(u => u.User).HasForeignKey(u => u.ApplicationUserId);
    }
}
public class RoleConfiguration : IEntityTypeConfiguration<Role>
{
    public void Configure(EntityTypeBuilder<Role> builder)
    {
        builder.ToTable("Roles");
        builder.HasKey(r => r.Id);
        builder.HasMany(e => e.UserRoles).WithOne(e => e.Role).HasForeignKey(e => e.RoleId);
    }
}
公共类用户配置:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
建造商。可转让(“用户”);
builder.HasKey(u=>u.Id);
builder.HasMany(u=>u.Role).WithOne(u=>u.User).HasForeignKey(u=>u.applicationserid);
}
}
角色配置

public class UserRoleConfiguration : IEntityTypeConfiguration<UserRole>
{
    public void Configure(EntityTypeBuilder<UserRole> builder)
    {
        builder.ToTable("UserRoles");
        builder.HasKey(k => new { k.RoleId, k.ApplicationUserId });
        builder.HasOne(k => k.Role).WithMany(k => k.UserRoles).HasForeignKey(k => k.RoleId).IsRequired().OnDelete(DeleteBehavior.Cascade);

        builder.HasOne(k => k.User).WithMany(k => k.Role).HasForeignKey(k => k.ApplicationUserId).IsRequired().OnDelete(DeleteBehavior.Cascade);
    }
}
public class UserConfiguration : IEntityTypeConfiguration<ApplicationUser>
{
    public void Configure(EntityTypeBuilder<ApplicationUser> builder)
    {
        builder.ToTable("User");
        builder.HasKey(u => u.Id);
        builder.HasMany(u => u.Role).WithOne(u => u.User).HasForeignKey(u => u.ApplicationUserId);
    }
}
public class RoleConfiguration : IEntityTypeConfiguration<Role>
{
    public void Configure(EntityTypeBuilder<Role> builder)
    {
        builder.ToTable("Roles");
        builder.HasKey(r => r.Id);
        builder.HasMany(e => e.UserRoles).WithOne(e => e.Role).HasForeignKey(e => e.RoleId);
    }
}
公共类角色配置:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
建造商。可转让(“角色”);
HasKey(r=>r.Id);
builder.HasMany(e=>e.UserRoles).WithOne(e=>e.Role).HasForeignKey(e=>e.RoleId);
}
}

同时找到了答案,存储库没有正确配置include和include

    return _users.Include(i => i.Role).ThenInclude(i => i.Role)
        .FirstOrDefault(u => u.Email == email && u.Password == password);
特别感谢高级ASP.NET开发人员,他花了很大的精力编辑了我的问题并格式化了我问题中的类