我在这里读过其他一些帖子,但我不确定我是否已经相当满意......
采取以下措施:
class Whatever
{
/// <summary>
/// Messages can relate to messages through replies
/// </summary>
public virtual IList<FieldMessage> FieldMessages { get; set; }
[NotMapped]
public int UnreadMessageCount
{
get
{
if( this.FieldMessages == null )
{
return 0;
}
return this.FieldMessages.Where(x => x.Read == false).Count();
}
}
}
这是一个实体框架类......
我的问题:
virtual IList properties
或者在执行此操作之前调用它?UnreadMessageCount
...我注意到在if语句中,{ {1}}占用整个6300 entires,我可以在调试时查看,然后this.FieldMessages
语句得到计数......它真的这样做吗?或者只是因为我正在调试它?答案 0 :(得分:1)
尝试使用集合时会立即进行查询:调用Count
属性,使用IEnumerable
扩展方法或foreach
进行迭代,...)。整个集合将在首次使用时加载,然后集合将保留在上下文中。
在调试器中尝试读取值时,将调用集合的方法并查询数据库。
如果FieldMessages
包含6300个条目,那么您应该避免在Whatever
类上声明收集。使用上下文和FieldMessage
的{{1}}查询附加到具有未读状态的特定DbSet
实例的未读邮件。