5

我首先使用實體​​框架4.1代碼。我有經典的示例:Order和OrderLines。 每個OrderLine都有自己的價格,我想要有屬性TotalPrice on Order。如何在實體框架代碼中映射總和屬性(如TotalPrice)代碼優先

我不確定現在聲明TotalPrice屬性。我可以用linq sum將它定義爲readonly,但是當我每次將它添加到結果集時,它都必須從db中獲取所有的orderlines以便對它的價格求和。

我在考慮解決方案,它將總價存入數據庫(用於查詢)並且只在訂單保存之前重新計算(或者如果訂單行更改),但我不知道該怎麼做。

如何在EF中處理這樣的場景?

感謝建議 彼得

回答

0

爲了簡單起見,我建議不存儲和只是增加的計算方法,以一個部分類。我們之前使用*Methods後綴完成了此操作。例如:

Order.cs:

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

OrderLine.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 
    } 
} 
+0

此解決方案不會將TotalPrice存儲在數據庫中,所以如果我需要顯示它,我必須始終重新計算,這就是我想要避免的。 – Petr

+0

在這種情況下,'Order'是你的聚合根,因此它總是在'Order'的上下文中處理你的'OrderLine'實例的集合 - 它們會被延遲加載或加載'訂單'。因此,當您添加另一個'OrderLine'時,計算總價格變得任意,並且沒有真正的理由來存儲它。 – ataddeini

+0

當我顯示訂單列表(名稱,客戶和總價)時,我想避免爲每個訂單加載OrderLines – Petr

0

我的理由來存儲總價性能。我已經有合同類,其中包含訂單(也有TotalPrice屬性)。當我沒有存儲總價格,並希望選擇合同列表(例如以電網)時,它必須始終讀取所有訂單和行。