Entity framework core 未使用多个结果填充子集合
我有一个模型,它的子集合只返回第一条记录。 父级(userModel)看起来像: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;
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集合的第一行。因此,事实证明,我没有给您提供足够的信息,存在一个组合键-当我进行上述更改并将组合键添加到上下文中时,它起作用了。再次感谢您的关注!