Допустим, я создал несколько моделей через 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, чтобы мне вообще не приходилось его изменять. Причина в том, что если я создаю новое решение и/или проект, я не хочу вносить в него какие-либо изменения при его автоматическом восстановлении с помощью Entity Framework. Стоит ли использовать затенение? Или новое ключевое слово в производном классе? Или у вас есть другие идеи получше?
Автоматически сгенерированные модели EF не содержат слова «виртуальный» в своих методах, поэтому я упомянул затенение и новое ключевое слово.