我有实体Post
,它与Comment
有一对多的关系。我希望拥有只返回其中某些子集的属性:
public class Post
{
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Comment> TopLevelComments
{
get
{
return Comments.Where(c => c.ParentID == null).ToList();
}
}
}
但是,此代码抛出
ArgumentNullException:值不能为null。参数名称:source
This answer似乎表明这是因为我在Comments
仍在null
时过滤了var post = await _context.Post.Include(m => m.Author).Include(m => m.Comments).ThenInclude(m => m.Author).SingleOrDefaultAsync(m => m.PostID == id);
。但是,在使用此方法的操作中,我急切地加载它:
new JLabel().setIcon()
我怎样才能让它发挥作用?这是否是正确的方法?
答案 0 :(得分:1)
首先,要避免这种异常,您需要在空实体的构造函数中初始化集合属性:
public Post()
{
Comment=new List<Comment>();
}
第二件事是使用ThenInclude
建议我使用EF Core。如果是这种情况,则必须使用预先加载,因为此版本的EF不支持延迟加载。
第三件事是TopLevelComments
属性不应映射为模型的一部分:
modelBuilder.Entity<Post>()
.Ignore(b => b.TopLevelComments);