首页 > 解决方案 > 为什么当我尝试从具有多对多关系的表中获取数据时出现异常

问题描述

我使用 EF6 数据库第一个标识 2.0 表。我尝试获取用户和角色记录并为此使用导航属性。

这是我在 VisualStudio 中的数据库方案:

在此处输入图像描述

这是我在 SQLManagmentStudio 中的原始数据库方案:

在此处输入图像描述

这里是实体:

    public virtual DbSet<ApplicationGroupRole> ApplicationGroupRoles { get; set; }
    public virtual DbSet<ApplicationGroup> ApplicationGroups { get; set; }
    public virtual DbSet<ApplicationUserGroup> ApplicationUserGroups { get; set; }
    public virtual DbSet<AspNetRole> AspNetRoles { get; set; }
    public virtual DbSet<AspNetUserClaim> AspNetUserClaims { get; set; }
    public virtual DbSet<AspNetUserLogin> AspNetUserLogins { get; set; }
    public virtual DbSet<AspNetUser> AspNetUsers { get; set; }
    

在这一行:

var query = context.AspNetUsers.SelectMany(c=>c.AspNetRoles).ToList();  

我收到此错误:

Invalid object name 'dbo.AspNetUserAspNetRoles'.

知道为什么我会收到此错误吗?

标签: c#.netentity-frameworkasp.net-identityef-database-first

解决方案


听起来您正试图从数据库中不存在的表中获取数据。检查您的数据库中是否存在表“dbo.AspNetUserAspNetRoles”。

这是关于stackoverflow的类似问题

在第二次查看您的问题时,您似乎正在尝试在 AspNetUser 和 AspNetRoles 之间创建多对多关系创建另一个 POCO 类链接多对多关系

public class AspNetUserAspnetRole{
public int AspNetRolesId {get;set;}
public int AspNetUserId {get;set;}
public AspNetRoles AspNetRoles {get;set;}
public AspNetUser AspNetUser {get;set;}

}

将此类添加到 db 上下文并添加迁移并更新数据库,然后您的查询应该可以工作


推荐阅读