Asp.net mvc 如何使用ViewModel定义数据注释?

Asp.net mvc 如何使用ViewModel定义数据注释?,asp.net-mvc,entity-framework,viewmodel,data-annotations,Asp.net Mvc,Entity Framework,Viewmodel,Data Annotations,我使用“ADO.NET实体数据模型”创建模型类,因此如果我更改数据库,我的模型类将更改 我的第一个类来自“ADO.NET实体数据模型” 如何做到这一点???ViewModel应该而不是使用生成的域类(TableA) TableA的ViewModel示例如下所示: public class TableAViewModel { [Required] public int Id { get; set } [Required] [Display(Name = "TableA Name

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

我的第一个类来自“ADO.NET实体数据模型”


如何做到这一点???

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; }
}
公共类TableAViewModel{
[必需]
公共int Id{get;set}
[必需]
[显示(Name=“TableA Name”)]
[StringLength(100,ErrorMessage={0}的长度必须至少为{2}个字符。”,MinimumLength=6)]
公共字符串名称{get;set;}
IEnumerable TableBViewModels{get;set;}
}
在控制器中,您将通过
TableA
类将检索到的属性从数据库移动到
TableAViewModel
类中。从视图回发时,您将把这些属性移回
表A

可以使用来执行此操作(对于对象和对象列表)

在视图模型中
TableAViewModel
可以像我的示例中那样添加数据注释(取自您的类)。这是您要使用的类,它们不会被任何东西自动重新生成,在视图中使用视图模型而不是域(数据库)类是一种很好的做法


希望这有帮助。

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; }
}
公共类TableAViewModel{
[必需]
公共int Id{get;set}
[必需]
[显示(Name=“TableA Name”)]
[StringLength(100,ErrorMessage={0}的长度必须至少为{2}个字符。”,MinimumLength=6)]
公共字符串名称{get;set;}
IEnumerable TableBViewModels{get;set;}
}
在控制器中,您将通过
TableA
类将检索到的属性从数据库移动到
TableAViewModel
类中。从视图回发时,您将把这些属性移回
表A

可以使用来执行此操作(对于对象和对象列表)

在视图模型中
TableAViewModel
可以像我的示例中那样添加数据注释(取自您的类)。这是您要使用的类,它们不会被任何东西自动重新生成,在视图中使用视图模型而不是域(数据库)类是一种很好的做法


希望这有帮助。

您应该单独创建模型。还有一个视图模型包括这三个模型。@AliRızaAdıyahşi,非常正确。最佳实践是拥有数据模型和表示模型。dustqm,如果您绝对需要DTO上的数据注释,请使用buddy类。您应该单独创建模型。还有一个视图模型包括这三个模型。@AliRızaAdıyahşi,非常正确。最佳实践是拥有数据模型和表示模型。dustqm,如果您绝对需要DTO上的数据注释,请使用buddy类。我可以问一下为什么您“不”在视图模型中使用生成的域类吗?关注的分离?不同的人生目标。首先将数据表示为正在存储和检索的数据(层次模型),后者专用于表示视图的相应数据块(因此称为视图模型)。它们不一定是1 x 1相关的(也不应该是相关的)。我可以问一下,为什么“不”在视图模型中使用生成的域类吗?关注的分离?不同的人生目标。首先将数据表示为正在存储和检索的数据(层次模型),后者专用于表示视图的相应数据块(因此称为视图模型)。它们不一定是1 x 1相关的(也不应该)。
    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; }
    }
public class MyViewModel
{
    public TableA tableA { get; set; }
    public IEnumerable<TableB> tableBs { get; set; }
    public IEnumerable<TableC> tableCs { get; set; }
}
    [Required]
    [Display(Name = "TableA Name")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string TableAName { get; set; }
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; }
}