在asp.net mvc中使用基本模型类而不进行修改
本文关键字:模型 修改 net asp mvc | 更新日期: 2023-09-27 18:24:35
假设我通过实体框架创建了几个模型,其中一个称为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技术是什么,这样我就不必修改它了。原因是,如果我创建了一个新的解决方案和/或项目,当我使用实体框架自动重新生成它时,我不想对它进行任何修改。我应该使用阴影吗?或者派生类中的新关键字?或者你们还有其他更好的想法吗?
自动生成的EF模型的方法中不包含"virtual",这就是我提出shadowing和新关键字的原因。
首先,不是每个问题都应该通过继承来解决。
其次,.NET框架已经有了向现有对象添加元数据(属性)的机制。这些被称为Buddy类,并使用MetadataTypeAttribute类。
其想法是向类添加一个属性,该属性允许您指定一个不同的类,该类用于定义原始类的元数据。它不漂亮,但它完成了任务。