如何使用ViewModel定义DataAnnotations?

时间:2013-02-22 15:58:27

标签: asp.net-mvc entity-framework viewmodel data-annotations

我使用“ADO.NET实体数据模型”创建我的模型类,所以如果我更改数据库,我的模型类将会改变..

我的第一堂课来自“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实体数据模型”;

    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 个答案:

答案 0 :(得分:3)

ViewModel应使用您生成的域类(TableA)。

TableA的ViewModel 示例将是以下类:

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中,您可以按照我的示例(从您的课程中获取)的方式添加数据注释。它是你要使用的类,它们不会被任何东西自动重新生成,并且在视图中使用视图模型而不是域(数据库)类是一种很好的做法。

希望这有帮助。