将数据库的值取为get {}值

时间:2013-02-12 10:16:14

标签: entity-framework entity-framework-5

我一直在使用以下技术在我的数据库中捏造计算值。

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]属性,Total会自动更新并保存。

如果我查询这样的发票:

_repository.Invoices.Select( i => i.Total );

实体框架将获取数据库的总数,而不是调用CalcTotal

但是,如果我这样做:

_repository.Invoices.ToList().Select( i => i.Total );

实体框架将调用CalcTotal

通常这是我想要的行为,但我现在遇到某个查询的问题。我必须使用ToList将所有记录提取到内存中,但我不想在每个项目上调用CalcTotal

有没有办法在这里改变我的小黑客以支持不一直打电话给CalcTotal

1 个答案:

答案 0 :(得分:1)

这不太棒,但你可以

public class Invoice
{
    public ICollection<Line> Lines {get;set;}

    private decimal _dbTotal;

    [AlwaysUpdate]
    public Decimal Total { get { return this.CalcTotal; } set{ _dbTotal = value; } }

    public Decimal DBTotal { get { return _dbTotal;} }

    public Decimal CalcTotal
    {
        get
        {
             return this.Lines.Sum( l => l.Price * l.Quantity );
        }
     }
}

DBTotal将始终返回存储在数据库中的总数,因此您可以针对DBTotal编写查询?