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