0

私はデータベース内の計算値を混乱させるために次の手法を使用しています。

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ますか?

4

1 に答える 1