0

假设我通过 Entity Framework 创建了一些模型,其中之一称为 Paper_Results。这是该类的外观:

public partial class Paper_Results
{
   public string Color { get; set; }
   public int Height { get; set; }
   public int Width { get; set; }
}

我想像使用域模型一样使用这个类。现在假设我创建了一个派生自 Paper_Results 并添加了接口的类

public class Construction_Paper : Paper_Results, IMeasurementType
{
    [Required]
    public (new?) string Color { get; set; }
    [Required]
    [Range(1, Int32.MaxValue, ErrorMessage = "Value should be greater than or equal to 1")]
    public (new?) int Height { get; set; }
    [Required]
    [Range(1, Int32.MaxValue, ErrorMessage = "Value should be greater than or equal to 1")]
    public (new?) int Width { get; set; }
    public virtual string MeasurementType
    {
       get { return "inches"; }
    }
}

现在,当我创建 ViewModel 时,我将使用派生类:

public class Construction_Paper_ViewModel
{
   Construction_Paper cp;
   List<Construction_Paper> cpList;
   string title;

   public Construction_Paper_ViewModel()
   {
       title = "Construction Paper";
       cp = new Construction_Paper();
       cpList = new List<Construction_Paper>();
   }
}

我知道我应该对非负整数使用 uint 而不是 int,但我只是想在代码中添加更多数据注释。我要问的是从 Paper_Result 类派生的最佳 OOP 技术是什么,这样我根本不需要修改它。原因是如果我创建一个新的解决方案和/或项目,我不想在使用 Entity Framework 自动重新生成它时对其进行任何修改。我应该使用阴影吗?还是派生类中的new关键字?或者你们还有其他更好的想法吗?

自动生成的 EF 模型在其方法中不包含“虚拟”,这就是我提出阴影和新关键字的原因。

4

1 回答 1

1

首先,不是每个问题都应该通过继承来解决。

其次,.NET 框架已经有一种将元数据(属性)添加到现有对象的机制。这些称为伙伴类,并使用 MetadataTypeAttribute 类。

这个想法是您向类添加一个属性,该属性允许您指定一个不同的类,该类用于定义原始类的元数据。它不漂亮,但它完成了工作。

于 2014-09-25T05:38:43.227 回答