2013-02-22 50 views
0

我創建了我的模型類與「ADO.NET實體數據模型」,所以如果我改變我的數據庫,我的模型類將改變..如何使用ViewModel定義DataAnnotations?

我從「ADO.NET實體數據模型」的第一課;

public partial class TableA 
    { 
     public TableA() 
     { 
      this.TableBs = new HashSet<TableB>(); 
     } 

     public int TableAID { get; set; } 
     public string TableAName { get; set; } 

     public virtual ICollection<TableB> TableBs { get; set; } 
    } 

我從「ADO.NET實體數據模型」獲得第二個類;

public partial class TableB 
    { 
     public TableB() 
     { 
      this.TableAs = new HashSet<TableA>(); 
     } 

     public int TableBID { get; set; } 
     public string TableBName { get; set; } 
     public int TableCID { get; set; } 

     public virtual TableC TableC { get; set; } 
     public virtual ICollection<TableA> TableAs { get; set; } 
    } 

我的第三課「ADO.NET Entity Data Model」;

public partial class TableC 
    { 
     public TableC() 
     { 
      this.TableBs = new HashSet<TableB>(); 
     } 

     public int TableCID { get; set; } 
     public string TableCName { get; set; } 

     public virtual ICollection<TableB> TableBs { get; set; } 
    } 

和我的ViewModel;

public class MyViewModel 
{ 
    public TableA tableA { get; set; } 
    public IEnumerable<TableB> tableBs { get; set; } 
    public IEnumerable<TableC> tableCs { get; set; } 
} 

而我想這樣做到我的ViewModel;

[Required] 
    [Display(Name = "TableA Name")] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    public string TableAName { get; set; } 

我該怎麼做?

+1

您應該分別創建模型。還有一個包含這三種模型的viewModel。 – 2013-02-22 16:10:45

+2

@AliRızaAdıyahşi,非常真實。最佳實踐是擁有數據模型和演示模型。 ** dustqm **,如果您確實需要DTO上的數據註釋,請使用好友類。 – 2013-02-22 16:12:14

回答

3

ViewModel應該不是使用您生成的域類(TableA)。對於表A

視圖模型示例將是下面的類:

public class TableAViewModel { 

    [Required] 
    public int Id { get; set } 

    [Required] 
    [Display(Name = "TableA Name")] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    public string Name { get; set; } 

    IEnumerable<TableBViewModel> TableBViewModels { get; set; } 
} 

在控制器你將檢索到的場所中,通過數據庫類TableA遷入TableAViewModel類。從視圖回傳時,您會將這些屬性移回TableA

您可以使用AutoMapper做到這一點(爲對象的對象和列表)

內,您的視圖模型TableAViewModel您可以添加數據註解的方式就像在我的例子(取自類)。它的類將使用,它們不會被任何東西自動重新生成,並且它是在視圖內使用視圖模型而非域(數據庫)類的良好實踐。

希望這會有所幫助。

+0

我可以問爲什麼你應該「不」在視圖模型中使用生成的域類?關注點分離? – Mark 2014-06-12 22:56:17

+0

生活中的不同目的。首先將數據表示爲被存儲和檢索的數據(分層模型),後者專用於表示視圖的各個數據塊(因此稱爲視圖模型)。它們不一定是1×1相關(並且不應該)。 – 2014-06-13 12:12:32

相關問題