使用EF框架从数据库产生实体类模型后,我们可以向这些数据模型添加数据注释,以指定验证要求及显示格式。如果不希望数据库发生更改,则直接将验证属性添加到模型类会起作用;但是,如果数据库发生更改,并且需要重新生成模型类,则将丢失应用于模型类的所有属性。
遇到此问题时,看到这篇文章 解决MVC中Model上的特性在EF框架刷新时清空的问题_顽石⚡的博客-优快云博客
但是说的稍显不够详细,于是又找到官方解释
教程:使用 ASP.NET MVC 应用增强 EF Database First 的数据验证 | Microsoft Learn
再简要说明一下:
一共三个类,命名空间要一致:
1.原来从数据库选择“更新模型”产生的实体类,类名一般为table名如Student,为EF框架自动产生
public partial class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
}
2.元数据类即所谓建立联系的类,类名自己起,例如StudentMetadata,将原来在实体类指定验证要求及显示格式的工作移动至此:
public partial class StudentMetadata
{
[Display(Name = "编号")]
[Required(ErrorMessage = "不可为空")]
public int StudentID { get; set; }
public string Name { get; set; }
}
3.关联实体类和元数据类的部分类,自己建立
[MetadataType(typeof(StudentMetadata))]
public partial class Student { }
总结:通过将元数据属性应用于分部类,可确保数据验证属性将应用于自动生成的类。 重新生成模型类时不会丢失这些属性,因为元数据属性在未重新生成的部分类中应用。