2012-07-31 74 views
1

我已經使用實體框架從現有數據庫生成模型,並且我想計算屬性的值。例如存在於數據庫中的MVC實體框架計算值

我有一個元信息表:

  • 的PageTitle,字符串,不能爲空
  • MetaTitle,字符串,可爲空

所以我已經構建了部分類:

public partial class MetaInfo 
{ 
    public string MetaTitle 
    { 
     get 
     { 
      if (string.IsNullOrEmpty(_MetaTitle)) 
      { 
       return _PageTitle; 
      } 
      return _MetaTitle; 
     } 
    } 
} 

顯然,這不起作用,因爲'MetaInfo類型已經包含一個定義爲MetaTile'。

有沒有辦法做到這一點維護相同的屬性名稱,或者我應該重新命名我的計算屬性?

雖然我在這裏,我可以做一些wiza-ma-jig並獲得代碼首先與我現有的數據庫集成,並會繞過這個問題嗎?

+1

[Entity Framework Power Tools](http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d?SRC=Featured)應該允許您從一個代碼優先的模型現有數據庫。 (不知道Code First是否會讓你做你需要的映射,但你至少應該能夠自定義映射字段/屬性的名稱。) – millimoose 2012-07-31 16:49:50

+1

我認爲你需要在某處添加另一層模型。你是否試圖直接在你的視圖中使用你的實體類?如果是這樣,你應該爲你的視圖創建ViewModels。這些將具有與自動生成的類幾乎相同的屬性,但您可以根據需要添加額外的方法(或更改屬性)。例如,添加一個名爲'GetPageTitle()'的函數,該函數檢查MetaTitle的值並執行任何您需要的操作。 – musefan 2012-07-31 16:56:54

+0

是的,我在我的視圖中使用實體類我認爲使用實體中的元數據/數據註釋/驗證幫助框架代碼單獨的視圖模型是不經濟的,但它不是非常乾燥或imo。現在,直到我找到一個更好的解決方案,我要與一個getter。謝謝:) – Smithy 2012-08-01 14:34:15

回答

1

按照慣例MetaTitle會從數據庫中列名,我不認爲有變圓了這個問題的一個簡單的方法你描述除了使用不同的名稱爲您的計算性能,像DisplayMetaTitleFriendlyMetaTitleViewMetaTitle是相當普遍的。

+0

是的,我知道他們映射到列名稱。我不知道單個數據和視圖模型是最好的解決方案還是可能的 - 但我希望它是這樣的:)這是我一直在尋找的解決方案,直到我找到更好的解決方案。謝謝:) – Smithy 2012-08-01 14:40:04

+0

通常建議有一個單獨的視圖模型或DTO,特別是如果您使用類似存儲庫模式的東西時,它允許您將數據層與邏輯分開。如果EF沒有意識到這一點,並且有一個將數據加載到DTO中的存儲庫,可以幫助EF查找性能問題,這對EF來說非常簡單。但使用該實體作爲較小程序的視圖模型並沒有本質上的錯誤。 – Ben 2012-08-01 15:59:53