Я постараюсь помочь вам со стороны MVC, так как именно в этом проблема, я полагаю
В методе Create () вы создаете объект Person и список отделов из базы данных, затем оба объекта передаются в представление. Представление берет данные из списка Department и использует их для отображения HTML-формы, используя только Id и Name.
На следующем шаге форма отправляется на сервер в виде набора пар ключ-значение (стандартное POST). Механизм маршрутизации берет запрошенный URL-адрес из атрибута действия и преобразует его в действие PersonController.Create (Person Model). Аргументом этого метода является Person, поэтому механизм связывания данных создает новый экземпляр класса Person и пытается сопоставить входящие данные со свойствами Person. В случае Department входящим значением является Id отдела (потому что это то, что вы задали в качестве элемента значения для DropDownList), в то время как свойство Department в классе Person, вероятно, относится к типу Department. Это несоответствие, поэтому оно не может заполнить свойство и остается пустым.
Как видите, это не ограничение DropDownList, проблема в том, что вы не можете передать все данные Отдела в DropDownList и создать его заново во время сохранения (как с Person) из-за характера запроса POST и именно поэтому DropDownList принимает только два значения из каждого отдела (значение и имя).
Мое обычное решение: так как обычно мои модели не являются теми же классами, что и мои бизнес-объекты, я делаю это, имея два свойства в модели: получить только свойство IEnumerable и другое свойство DepartmentId (get / set). Тогда я использую это так:
<%= Html.DropDownList("DepartmentId", Model.Departments) %>
Затем в действии сохранения я извлекаю Department из базы данных с помощью DepartmentId, назначаю его Person и сохраняю.
В вашем случае (модели являются бизнес-объектами), я бы, вероятно, не пытался автоматически привязать модель Department к Person, а просто взял Id и сделал бы это сам.
Это всего лишь предположение (я не специалист по EF), но я думаю, что у вас здесь может быть другая проблема: если db - это поле в Controller, и оно создается заново при каждом запросе, это может быть ненужным накладные расходы. Я надеюсь, что он не открывает соединение с БД каждый раз, пожалуйста, проверьте его.
Надеюсь, это поможет