EF从数据库更新模型时保留Model上的属性设定

使用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 { }

总结:通过将元数据属性应用于分部类,可确保数据验证属性将应用于自动生成的类。 重新生成模型类时不会丢失这些属性,因为元数据属性在未重新生成的部分类中应用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值