我在数据库优先上下文中使用EF6。在这种情况下,我将在MVC Web项目中使用实体类,并希望使用各种验证和显示属性来注释实体的字段。但是,当我在edmx设计器中通过从数据库进行更新来刷新实体类时,这些类会重新生成并且我的属性会丢失。
解决这个问题的最佳方法是什么?
在数据库第一个Entity Framework项目中处理生成的实体类时,通常需要将属性应用于类的字段。如果您要先使用ViewModels并直接在MVC Web项目中使用实体,则尤其如此。
当然,如果直接将验证或显示名称属性应用于字段,则下次由于从数据库操作升级而生成数据模型时,所有这些都将被覆盖。
幸运的是,实体框架生成的类被标记为局部的。这意味着我们可以创建第二类来增强第一类。实际上,这两个类别被视为一个类别。例如:
[MetadataType(typeof(AnimalMetaData))]
public partial class Animal
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int NumberOfLegs { get; set; } etc..
public class AnimalMetaData
{
[MaxLength(200)]
[Required]
public string Name { get; set; }
[MaxLength(1000)]
public string Description { get; set; } etc...
但是我们这里当然有问题。我们已经将属性与元数据类关联到实体类,并且该属性将在数据库更新时被覆盖。那么如何解决这个问题?简单的!我们创建了第三个“虚拟”类,称为Animal,它与元数据类并排放置,并且是局部的:
[MetadataType(typeof(AnimalMetaData))]
public partial class Animal {}
我们用元数据类为该类添加注释,因此实际上,这三个类是一个类。实体本身,是将实体与元数据定义类链接的伪类。
为了使内容整洁,您可能要做的比将元数据和伪类放到与Entity Framework生成的实体相邻的单独文件夹中更糟糕。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句