2014-09-24 44 views
0

假設我通過實體框架創建了一些模型,其中一個模型被稱爲Paper_Results。這是類可能看起來如何:在沒有在asp.net中修改它的情況下使用基礎模型類mvc

public partial class Paper_Results 
{ 
    public string Color { get; set; } 
    public int Height { get; set; } 
    public int Width { get; set; } 
} 

我想使用這個類像一個域模型。現在讓我們說我創建一個類從Paper_Results的導出與添加的接口

public class Construction_Paper : Paper_Results, IMeasurementType 
{ 
    [Required] 
    public (new?) string Color { get; set; } 
    [Required] 
    [Range(1, Int32.MaxValue, ErrorMessage = "Value should be greater than or equal to 1")] 
    public (new?) int Height { get; set; } 
    [Required] 
    [Range(1, Int32.MaxValue, ErrorMessage = "Value should be greater than or equal to 1")] 
    public (new?) int Width { get; set; } 
    public virtual string MeasurementType 
    { 
     get { return "inches"; } 
    } 
} 

現在,當我創建我的ViewModel,我會用派生類來代替:

public class Construction_Paper_ViewModel 
{ 
    Construction_Paper cp; 
    List<Construction_Paper> cpList; 
    string title; 

    public Construction_Paper_ViewModel() 
    { 
     title = "Construction Paper"; 
     cp = new Construction_Paper(); 
     cpList = new List<Construction_Paper>(); 
    } 
} 

我知道我應該是對於非負整數使用uint而不是int,但我只是想向代碼添加更多數據註釋。我問的是從Paper_Result類派生出來的最好的OOP技術是什麼,所以我根本不需要修改它。原因是因爲如果我創建一個新的解決方案和/或項目,當我使用Entity Framework自動重新生成它時,我不想對它做任何修改。我應該使用陰影嗎?或派生類中的新關鍵字?或者你們有其他更好的想法嗎?

自動生成的EF模型在其方法中不包含「虛擬」,因此我提出了陰影和新關鍵字的原因。

回答

1

首先,不是每個問題都應該通過繼承來解決。

其次,.NET框架已經有一種機制來向現有對象添加元數據(屬性)。這些被稱爲Buddy Classes,並使用MetadataTypeAttribute類。

這個想法是,你添加一個屬性到類,允許你指定一個不同的類,用於定義原始類的元數據。這不太好,但它完成了工作。

+0

謝謝。你還可以添加其他屬性/方法嗎?我認爲你可以。 – 2014-09-25 14:41:35

+1

@AndyNarain - 你有幾個選項,你可以讓Partial類添加額外的項目......但明白,繼承定義了「是 - 一個」關係。它不應該簡單地用於保存擊鍵。 – 2014-09-25 15:59:25

+0

這就是我最終做的。我創建了一個附加屬性的好友類。 – 2014-09-26 18:05:58

相關問題