Вы можете довольно легко выполнить то, что вы просите.У Дарина есть очень верное замечание, которое хорошо подходит для крупных проектов, но я думаю, что для небольших проектов это звучит как излишнее.Также кажется, что это во многом зависит от того, используете ли вы DataAnnotations для проверки или используете стороннюю библиотеку.ИМХО, из-за того, что повторение не выполнялось, создавало неудобства при обслуживании.Существует также тот факт, что вы тратите много строк кода, просто копируя данные из БД в модель представления;Предполагается, что ORM помогут устранить это, но пока решение выглядит не очень хорошим.
Вот пример кода о том, как делать то, что вы хотите.Первый класс частичный, основная часть находится в сгенерированном EF-коде (сначала я собираюсь модель, а не код).Также, в качестве примера, у Вопроса есть FK to QuestionGroup.В БД это столбец с именем GroupID, но во ViewModel есть свойство с именем GroupName для отображения в симпатичной маленькой сетке (фактически, Telerik Grid, которая в основном ломается, если вы пытаетесь передать объект EF).
[MetadataType(typeof(QuestionMetadata))]
public partial class Question
{
}
public class QuestionMetadata
{
public Int32 ID { get; set; }
[Required]
[Display(Name="Question")]
public String QuestionText { get; set; }
[Display(Name = "Order")]
public Int16 SortOrder { get; set; }
}
[MetadataType(typeof(QuestionMetadata))]
public class QuestionViewModel
{
/* Fields found in the original model */
public Int32 ID { get; set; }
public String QuestionText { get; set; }
public Int16 SortOrder { get; set; }
/* Fields that map child object data for this view model */
[Display(Name = "Question Group")]
public String GroupName { get; set; }
}
ИМХО и EF, и Telerik заставляют меня не быть СУХОЙ здесь, но я ничего не могу поделать.EF должен генерировать эти DataAnnotations по умолчанию (или, по крайней мере, иметь опцию), поскольку он, очевидно, знает, какие поля являются обязательными (не нулевыми) или какова максимальная длина различных строк.Затем Telerik заставляет меня создать ViewModel, что также болезненно.