Уважаемые пользователи,
Постигаю прелести фреймворка ASP.NET MVC вкупе с Entity Framework. Используется DataBase-First подход проектирования.
Entity Framework автоматически генерирует модели для меня, при этом каждая модель описана в partial-классе(наверное не просто так?).
Вопрос следующий: существует простая модель заказа автомобиля - Order. Упростим эту сущность до двух свойств:
-Марка автомобиля(Car)
-Имя заказчика(CustomerName)
Получаем сгенерированный класс:
public partial class Order
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public string CustomerName { get; set; }
public string Car{ get; set; }
}
С этой моделью, предположим, связаны 3 View:
-ListView - Отображение всех заказов
-ItemView - Отображение конкретного заказа
-CreateView - Добавление нового заказа
Для каждого из View я создаю отдельную ViewModel(допустим, у меня каждое View содержит еще панель управления, которая может содержать свои функции).
ListView содержит действие Create,
ItemView - Edit, Delete,
CreateView это Save, Cancel
В случае с ItemViewModel модель имеет следующий вид:
public class OrderItemViewModel
{
public ItemToolboxViewModel Toolbox { get; set; }
public Data.Order Item { get; set; } // это ссылка на доменную модель
}
В случае с последним CreateViewModel, у меня возникает необходимость дать пользователю выбрать марку, т.е. реализовать DropDownFor на вход которому нужно подать уже
List<SelectListItem>
. В этом случае модель имеет вид:
public class OrderItemCreateViewModel
{
public ItemCreateToolboxViewModel Toolbox { get; set; }
public OrderItemCreateModel Item { get; set; }
}
public class OrderItemCreateModel
{
public string CustomerName { get; set; }
public string Car{ get; set; } // используется для байндинга значения во View
public List<SelectListItem> Cars{ get; set; } // используется для заполнения списка автомобилей в DropDownFor
}
Соответственно получая POST-запросом
OrderItemCreateViewModel.Item
я не могу ее отправить в
Context.Orders.Add()
. Приходится определять новый объект доменной модели Order и инициализировать значения свойствами из
OrderItemCreateViewModel.Item