私はデータベース内の計算値を混乱させるために次の手法を使用しています。
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 );
}
}
}
[AlwaysUpdate]
この手法により、請求書の合計をデータベースに保存できます。行が変更された場合、属性のおかげで合計が自動的に更新されて保存されます。
私がそのように請求書を照会する場合:
_repository.Invoices.Select( i => i.Total );
エンティティフレームワークは、DBの合計を取得し、呼び出しませんCalcTotal
。
ただし、これを行うと:
_repository.Invoices.ToList().Select( i => i.Total );
エンティティフレームワークはを呼び出しますCalcTotal
。
通常、これは私が望む動作ですが、特定のクエリに問題があります。すべてのレコードをメモリにフェッチするために使用する必要がありますが、すべてのアイテム ToList
を呼び出す必要はありません。CalcTotal
いつも電話をかけないことをサポートするために、ここで私の小さなハックを変更する方法はありCalcTotal
ますか?