0

我有一个模型,它有一个只返回第一条记录的子集合。父(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; }

}

未正确补水的模型是 UserMember 集合。它看起来像这样:

 public class UserMember
{
    [Key]
    public int UserID { get; set; }
    public int GroupID { get; set; }
    public DateTimeOffset Created { get; set; }
    public virtual Group Group { 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);

    }

它正在为一个 UserMember 补水,但我希望看到 3 个结果。用户--> 用户成员。

我尝试将 IEnumerable 更改为 ICollection,但它也不起作用。我在上下文中没有任何流畅的语法代码,除了通常的映射等 - modelBuilder.Entity().ToTable("user", "info");

有任何想法吗?

4

1 回答 1

1

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

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();

}
于 2018-07-16T05:35:12.227 回答