我有一个工作模型,包含了许多特性,和一组链接的实体称为行情:了解虚拟化和计算性能
public class Job
{
....
public virtual ICollection<Quote> Quotes { get; set; }
}
在我的作业类,我有以下计算性能:
public decimal QuotesAwarded
{
get
{
if (Quotes == null || !Quotes.Any())
{
return 0;
}
var totalUnapprovedQuotes = Quotes.Where(x => x.Status != "Approved");
return 1 - (totalUnapprovedQuotes.Count()/Quotes.Count());
}
set
{
}
}
我有2个问题:
当我调试此属性,
Quotes
为空(即使有附引号这个实体)。我认为,使用virtual
意味着,这不应该发生的呢?我怎样才能确保在模型构建时,相关的报价实体被附加?我这样做的原因是,该属性值存储在数据库中,所以它减少计算时间,因为它是预先计算的,这是正确的?检索作业对象时,我没有使用
Include<Quotes>
在大多数情况下:
跟进。我仅在需要QuotesAwarded
值时才使用“包含”。
但是,如果我不使用Include
(比如db.jobs.find(id)
),和报价为空,而QuotesAwarded
值将为0。所以,当我保存作业对象,这将得到保存到数据库中,我真的很迷茫我在这里。
您是使用懒惰还是渴望加载?你如何从数据库中读取实体? – DavidG
感谢您的答复,我已经更新了问题 –