В модели вида нет ничего волшебного.Это просто класс.Идея состоит в том, что класс сущности (то есть вещь, которую вы сохраняете в базе данных через Entity Framework) должен касаться только потребностей базы данных.Представление может и часто имеет совершенно другой набор потребностей, поэтому вы создаете класс специально для этого: модель представления.Это просто базовый SRP (принцип единой ответственности): один класс не должен пытаться делать слишком много.
Тогда вам просто нужен способ соединить их.Другими словами, вам необходимо скопировать значения из сущности в модель представления и наоборот.Этот процесс называется картированием и может быть достигнут различными способами.Наиболее распространенным подходом является использование сторонней библиотеки, такой как AutoMapper.Тем не менее, вы также можете просто вручную сопоставить каждое значение или даже использовать что-то похожее на фабричный шаблон, где у вас есть другой класс, который содержит знания о том, как выполнить сопоставление, и может выплевывать сущность из модели представления и наоборот.
Теперь, на самом деле невозможно дать вам точное руководство, потому что у нас нет вашей сущности, но вы, похоже, хотите выбрать конкретные Staff
, Service
и BookingSlot
и свяжите это с Appointment
, который вы создаете.Это не критично, но для эффективности вы не должны носить с собой полный набор всех этих сущностей в вашей модели представления.Все, что вам нужно, это IEnumerable<SelectListItem>
, который позволяет вам использовать гораздо более эффективные запросы:
Вместо свойства Staffs
, например:
public IEnumerable<SelectListItem> StaffOptions { get; set; }
Тогда:
model.StaffOptions = await _context.Staffs.AsNoTracking()
.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() })
.ToListAsync();
На ваш взгляд:
<select asp-for="StaffId" asp-items="@Model.StaffOptions" class="form-control"></select>