我一直在使用以下技术来伪造数据库中的计算值。
public class Invoice
{
public ICollection<Line> Lines {get;set;}
[AlwaysUpdate]
public Decimal Total { get { return this.CalcTotal; } set{} }
public Decimal CalcTotal
{
get
{
return this.Lines.Sum( l => l.Price * l.Quantity );
}
}
}
这种技术允许我在我的数据库中存储发票的总计,如果 Lines 发生变化,Total 会自动更新并保存,这要归功于我的[AlwaysUpdate]
属性。
如果我像这样查询发票:
_repository.Invoices.Select( i => i.Total );
实体框架将去获取数据库的总数,而不是调用CalcTotal
.
但是,如果我这样做:
_repository.Invoices.ToList().Select( i => i.Total );
实体框架将调用CalcTotal
.
通常这是我想要的行为,但我现在对某个查询有疑问。我必须使用ToList
将所有记录提取到内存中,但我不想调用CalcTotal
每个项目。
有没有办法改变我的小技巧以支持不CalcTotal
一直打电话?