2016-09-23 120 views
0

我正在使用實體框架與數據庫優先的方法。我已經在我的應用程序中定義了模型。現在我正在使用控制器和視圖。我使用腳手架來創建控制器。現在我想創建行。ASP.NET MVC實體框架:數據註解

比方說,我要創造員工,讓我們假設DBA和EF使之成爲可能:

public partial class TBL_EMPLOYEE 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public TBL_EMPLOYEE() 
     { 
      this.TBL_EMPLOYEE = new HashSet<TBL_EMPLOYEE>(); 
     } 

     public int EMPLOYEE_ID { get; set; } 
     public String CO_WORKER_NUMBER { get; set; } 
     public string NAME { get; set; } 
     public string LAST_NAME { get; set; } 
     public string SALARY { get; set; } 
     public string PHONE_NUMBER { get; set; } 
     public string EMAIL { get; set; } 
     public string { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    } 

現在,我需要一個視圖中創建一個員工,讓我們把這個觀點VIEW 1 在這個視圖中,用戶只需要指定姓名和姓氏值。兩者都是必需的。

現在,在這個VIEW 1情況下,我可以使用下面的數據說明在同一類屬性,這會是:

 [Required] 
     public string NAME { get; set; } 

     [Required] 
     public string LAST_NAME { get; set; } 

現在,讓我們進入下一個情況。我需要另一個視圖,我們稱之爲VIEW 2 在這一個中,用戶需要指定所有屬性的所有值。除名稱和姓氏之外,所有這些都是必需的。

真正的問題

如何使用相同的模型類這兩種觀點?上面的例子可能看起來有點愚蠢和微不足道的驗證,但我一直在更大的項目中,實體更大,擁有不同的ViewModel類的想法只是很多工作。

我已經在我的.NET開發在這個迷迷糊糊的,到我不得不以創建每次觀看ViewModel類是具體與哪些用戶需要輸入他們的驗證點。這是唯一的方法嗎?這些實體

+0

您可以爲每個視圖創建不同的視圖模型。 – Shyju

+0

使用單獨[視圖模型(http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc),而不是局部類 –

+0

@StephenMuecke是的,我認爲這是唯一的辦法。我只是在想,可能還有另一種方式。但是這需要很多時間。與PHP Laravel不同的是,當您根據Request對象驗證所有內容時,無論Employee模型是什麼樣子 – ggderas

回答

1

爲了避免有少許變化複製模型,嘗試:

https://stackoverflow.com/a/18898112/6850962

基本上,創建具有數據的註釋,在所有的情況(例如:DisplayName)基礎模型,然後延伸變體模型(例如:Required屬性)。

+0

謝謝,我從來沒有想過重寫屬性和使用繼承。這肯定會讓我的代碼更加混亂。謝謝 – ggderas

0

如果你要使用你的實體框架的實體的方法,我不會把驗證屬性。我要麼:

  1. 創建獨立的不同的類,然後(通過明確地編寫代碼,或使用像AutoMapper或許多其他工具)從EF實體模型,反之亦然上更新的數據複製。然後你可以定義你想要的驗證規則。不幸的是,這種方法確實將驗證與模型緊密結合,因此模型重用可能不盡如人意。

  2. 使用像FluentValidation(https://github.com/JeremySkinner/FluentValidation)更爲流暢驗證框架。這樣做的好處是您可以定義一個內部規則的外部類,根據具體情況可以應用不同的規則。該模型可能仍然需要模型本身的一些指標來確定適用哪些規則,但這是處理您描述的場景的另一種功能方法。