我首先使用实体框架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属性)。当我不存储总价,并且想要选择合同列表(例如网格)时,它必须始终读取所有订单及其行。