2012-12-10 30 views
2

我引用的SO這個問題:有道有一個計算領域的EF代碼優先

Store read-only calculated field with Entity Framework Code First

他們的所作所爲是有意義的,但我想的東西有點不同,我不知道我的實現是正確的,或者如果有任何更簡單的方式來做到這一點:

public class AffiliateCommission 
{ 
    public int Id { get; set; } 
    public Merchant Merchant { get; set; } 
    public AffiliateCommissionType Type { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public int Amount { get; set; } 
    public string Status { get; set; } 
    public DateTime RecievedDate { get; set; } 
    public int TotalPaid { get 
    { 
     if (Status == "Paid") 
     { 
      return this.Amount += this.Amount; 
     } 
     return 0; 
    } 
     protected set { } 
    } 


    public int TotalUnpaid 
    { 
     get 
     { 
      if (Status == "Unpaid") 
      { 
       return this.Amount += this.Amount; 
      } 
      return 0; 
     } 
     protected set { } 
    } 
    public int TotalInvoiced 
    { 
     get 
     { 
      if (Status == "Invoiced") 
      { 
       return this.Amount += this.Amount; 
      } 
      return 0; 
     } 
     protected set { } 
    } 
} 

有將是AffiliateCommissions的名單,我想獲得總關基礎地位的所有佣金。將其存儲在不同的模型中可能?需要一些實施建議。

回答

2

你爲什麼試圖堅持一個計算的領域?通過屬性中的計算邏輯,您可以將該屬性暫時保留爲瞬態,並且每次都可以進行計算。這樣就沒有必要堅持下去。你的計算似乎並不昂貴。在業務邏輯發生變化的情況下,這種方法還具有計算值始終準確的優點。

保留計算字段的一個用例是用於報告您希望直接從數據庫中提取。如果是這樣的話,我會建議查看mapreduce查詢來代替:http://en.wikipedia.org/wiki/MapReduce

+0

好吧,是的,我不需要這個任何沉重的報告或任何東西,所以也許我錯誤地看着解決方案。我只是想弄清楚在我的asp.net MVC控制器中引入一組AffiliateCommisions的最佳路徑,將該列表返回給視圖,並以簡單的方式在視圖中提供某些記錄的總和,最好避免js。對不起,如果這沒有意義。一直在編碼死亡遊行,現在是凌晨1點。 – ledgeJumper

+0

@davidisawesome如果您使用的是強類型視圖,那麼您應該可以像訪問其他人一樣訪問您的計算屬性。如果不是,則可以改爲使用視圖模型。也許你的物業並沒有計算你真正想要的東西 - 但目前看起來像'TotalUnpaid'會一直關注這一點。僅記錄當前記錄。如果你試圖在記錄中總結數值,那麼這個類可能不是它的地方 – rouan

1

我喜歡EF Code First,但實際上並沒有「先編碼」。我通常會在數據庫中創建模式,並使用EF Code First Powertool進行反向工程。 Code First的重量更輕,但是在開發和生產過程中,整個數據庫升級過程可能會很痛苦,所以我發現維護數據庫的舊學校方式和逆向工程師可以更容易地獲得我的實體。

您可以嘗試這種方法,在SQL Server中創建計算字段,然後對其進行逆向工程,以查看生成的代碼。

+0

我同意,當我有現有數據時,我首先嚐試編碼時有很多痛苦。我認爲正確的做法是通過我們的項目插入數據(如果正在遷移)。不得不重複遍歷每個數據庫表格更改的模型雖然也很麻煩。 – Worthy7