Entity framework core 未使用多个结果填充子集合

Entity framework core 未使用多个结果填充子集合,entity-framework-core,ef-core-2.0,ef-core-2.1,Entity Framework Core,Ef Core 2.0,Ef Core 2.1,我有一个模型,它的子集合只返回第一条记录。 父级(userModel)看起来像: public class User { [Key] public int UserID { get; set; } public string Username { get; set; } [StringLength(50)] public string EmailAddress { get; set; } public bool IsDeleted{ get;

我有一个模型,它的子集合只返回第一条记录。 父级(userModel)看起来像:

 public class User
{

    [Key]
    public int UserID { get; set; }
    public string Username { get; set; }
    [StringLength(50)]
    public string EmailAddress { get; set; }
    public bool IsDeleted{ get; set; }
    [ForeignKey("UserID")]
    public virtual UserInformation UserInformation{ get; set; }
    [ForeignKey("UserID")]
    public virtual IEnumerable<UserMember> UserMember{ get; set; }

}
我使用的查询是:

public IQueryable<User> GetUserByUserSId(Guid userSid)
    {
        return _freightPortalPreferencesContext.User
                .Include(ui => ui.UserInformation)
                .Include(um => um.UserMember)
                .Where(x => x.SID == userSid && x.Enabled);

    }
公共IQueryable GetUserByUserSId(Guid userSid) { return\u freightportalpreferencecontext.User .Include(ui=>ui.UserInformation) .Include(um=>um.UserMember) 。其中(x=>x.SID==userSid&&x.Enabled); } 这是水合一个用户成员,但我期待看到3个结果。 用户-->用户成员

我曾尝试将IEnumerable更改为ICollection,但它也不起作用。 除了通常的映射etc-modelBuilder.Entity()


有什么想法吗?

您没有正确映射外键。您的模型类应如下所示:

public class User
{

    [Key]
    public int UserID { get; set; }
    public string Username { get; set; }
    [StringLength(50)]
    public string EmailAddress { get; set; }
    public bool IsDeleted{ get; set; }

    public virtual UserInformation UserInformation{ get; set; }

    public virtual ICollection<UserMember> UserMembers { get; set; }

}

public class UserMember
{
    [Key]
    [ForeignKey("User")]
    public int UserID { get; set; }
    public int GroupID { get; set; }
    public DateTimeOffset Created { get; set; }
    public virtual Group Group { get; set; }

    public virtual User User {get; set;}
}
public IQueryable<User> GetUserByUserSId(Guid userId)
{
        return _freightPortalPreferencesContext.User
                .Include(u => u.UserInformation)
                .Include(u => u.UserMembers)
                .Where(u => u.SID == userId && u.Enabled).AsQueryable();

}
公共类用户
{
[关键]
public int UserID{get;set;}
公共字符串用户名{get;set;}
[长度(50)]
公共字符串电子邮件地址{get;set;}
公共布尔被删除{get;set;}
公共虚拟用户信息用户信息{get;set;}
公共虚拟ICollection用户成员{get;set;}
}
公共类用户成员
{
[关键]
[外键(“用户”)]
public int UserID{get;set;}
public int GroupID{get;set;}
已创建公共DateTimeOffset{get;set;}
公共虚拟组{get;set;}
公共虚拟用户用户{get;set;}
}
那么您的查询应该如下所示:

public class User
{

    [Key]
    public int UserID { get; set; }
    public string Username { get; set; }
    [StringLength(50)]
    public string EmailAddress { get; set; }
    public bool IsDeleted{ get; set; }

    public virtual UserInformation UserInformation{ get; set; }

    public virtual ICollection<UserMember> UserMembers { get; set; }

}

public class UserMember
{
    [Key]
    [ForeignKey("User")]
    public int UserID { get; set; }
    public int GroupID { get; set; }
    public DateTimeOffset Created { get; set; }
    public virtual Group Group { get; set; }

    public virtual User User {get; set;}
}
public IQueryable<User> GetUserByUserSId(Guid userId)
{
        return _freightPortalPreferencesContext.User
                .Include(u => u.UserInformation)
                .Include(u => u.UserMembers)
                .Where(u => u.SID == userId && u.Enabled).AsQueryable();

}
public IQueryable GetUserByUserSId(Guid userId)
{
return\u freightportalpreferencecontext.User
.Include(u=>u.UserInformation)
.包括(u=>u.UserMembers)
.Where(u=>u.SID==userId&&u.Enabled).AsQueryable();
}

考虑将
用户成员
主键更改为复合或使用自己的Id。现在,唯一的主键
用户Id
被用作
用户
的FK,因此与
用户
相关的
用户成员
,尽管您拥有集合导航属性。谢谢-它仍然只返回UserMember集合的第一行。因此,事实证明,我没有给您提供足够的信息,存在一个组合键-当我进行上述更改并将组合键添加到上下文中时,它起作用了。再次感谢您的关注!