c#4.0-如何在实体框架代码优先映射sum属性(如TotalPrice)



我首先使用实体框架4.1代码。我有一个经典的例子:订单和订单行。每个订单行都有自己的价格,我想在订单上有属性TotalPrice。

我现在不确定是否要声明TotalPrice属性。我可以使用linq-sum将其定义为只读,但每次将其添加到结果集时,它必须从数据库中获取所有订单行,以对其价格进行求和。

我正在考虑这个解决方案,它将totalprice存储到数据库中(用于查询),并仅在订单保存之前(或在订单行更改时)重新计算,但我不知道如何做到这一点。

如何在EF中处理这样的场景?

谢谢你的建议Petr

为了简单起见,我建议不要存储,只在分部类中添加一个计算方法。我们以前用*Methods后缀做过这个操作。例如:

订单.cs:

public partial class Order 
{       
   public ICollection<OrderLine> OrderLines { get;set; }
   //Other EF Properties
}

订单行.cs:

public partial class OrderLine 
{       
   public double Price { get;set; }
   //Other EF Properties
}

OrderMethods.cs

public partial class Order 
{
    public double GetTotalPrice() 
    {
        // Total price calculation
    }
}

我存储总价的原因是性能。我已经有了包含Orders的合同类(也有TotalPrice属性)。当我不存储总价,并且想要选择合同列表(例如网格)时,它必须始终读取所有订单及其行。

最新更新