Сохранение выбора выпадающего списка с Entity Framework в решении ASP.NET MVC - PullRequest
4 голосов
/ 22 июля 2010

Мне нужен совет по порядку выбора выпадающего списка и сохранению выбора с помощью POCO EF, пожалуйста.

У меня есть список IEnumerable<Country> в моей модели представления, где Страна - это POCOзагружается через EF.В модели представления есть свойство Address, которое принимает текущее или выбранное пользователем значение в свойстве Country.В представлении я отображаю их с помощью Html.DropdownListFor (), таким образом:

Html.DropDownListFor(model => model.Address.Country.Id, new SelectList(Model.Countries,"Id","Name",model.Address.Country.Id)

Пока все хорошо, и все это работает при обратной передаче с ModelBinder по умолчанию, предоставляя мне модель представления с заполненной Address.Country,Однако Address.Country, конечно, только заполняется полем Id с привязкой модели по умолчанию.

Попытка отправить обновление адреса обратно в БД через EF срывается, так как это рассматривается как новый объект, который незагрузите полный граф объектов, установите только Id.

Теперь я могу это исправить, загрузив полный объект Country из базы данных в свойство Address.Country при обратной передаче перед сохранением на основе выбранного Id.Но это похоже на тяжелую работу для чего угодно, кроме простого графов объектов.

Самым «элегантным» решением, которое я мог бы придумать, было бы создание пользовательского механизма связывания моделей для Country, но тогда для этого потребовалось бы связывание моделей.знать о хранилище для получения полного объекта EF, что мне не кажется правильным.Я также должен повторить это для всех других сущностей, используемых в выпадающих списках.

Надеюсь, это имеет смысл, и любые отзывы о том, как это делают другие, будут оценены.

Ответы [ 2 ]

0 голосов
/ 04 января 2013

В вашем классе Address объявите страну как виртуальную

public class Address
{
  public virtual Country Country;
}

попробуйте это и дайте мне знать, если это работает, Virtual поддерживает отложенную загрузку и вам не нужно явно запрашивать

0 голосов
/ 25 октября 2010

Если вы установите Address.Country для объекта, EF ожидает, что он будет полным объектом, который является частью текущего контекста, но EF распознает внешние ключи: если ваш объект Address имеет как свойство CountryID, так и свойство Country, он должен принимать Address.CountryID, установленный, пока сам Address.Country имеет значение null.

...