2009-11-05 4 views
0

Что я хочу сделать, это установить объект внешнего ключа в объекте EF через FluentHtml. У меня есть объект Foo со ссылкой на панель объектов через Foo.Bar. То, что я пытаюсь сделать, это установить значение Bar в моей форме представления. Мои модели содержат коллекцию всех баров через Model.Bars. На мой взгляд, я просто использую <%= this.Select(m => m.Foo.Bar).Options(Model.Bars) %>, но состояние модели утверждает, что оно недействительно. Выпадающее меню заполнено значками панели, и все это выглядит корректно. Есть ли какая-то специальная магия, которая мне нужна для задания ссылочных свойств объекта EF в моих формах?Как установить объект внешнего ключа с использованием Entity Framework и FluentHtml

Я только что перешел из Linq2SQL, где я просто использовал Select (m => m.Foo.BarId), так как вы могли бы отобразить ключевую ссылку, а также объект. Однако Entity Framework этого не допускает.

ответ

1

Вы сталкиваетесь с одним из многих осложнений, возникающих при использовании бизнес-объектов в качестве моделей вашего представления. Я мог бы предположить, что в долгосрочной перспективе гораздо меньше проблем, если вы преобразуете бизнес-объекты в модели с легким представлением для рендеринга и привязки. Пусть ваш сервисный уровень (или контроллер, если нужно) выяснить, как установить Foo.Bar на основе EditFoo.BarId.

+0

Я действительно надеялся, что asp.net может сделать магию в этом отношении. Я искал, чтобы уйти от необходимости поддерживать два почти одинаковых объекта, чтобы порадовать взгляды. –

+0

Монорельс (вдохновение для MS MVC) имеет следующее: ARDataBind. Используя это, я могу подтвердить, что то, что вначале ощущается как облегчение боли, серьезно повредит ремонтопригодности, тестируемости и расширяемости. Включение проблем сохранения в UI = плохо. О «почти идентичных» объектах взгляните на AutoMapper. Однако, если ваши объекты почти идентичны, вы, возможно, попали в анемичный doamin anti-pattern. –

0

Я не знаю FluentHtml. Но в отношении EF:

  1. EF 4.0 позволяет вам иметь «ассоциации внешних ключей», которые позволяют ссылаться на m.Foo.BarId, как L2S.
  2. В EF 1 или с «независимыми ассоциациями» в EF 4 вам нужно сделать m.Foo.Bar.Id (обратите внимание на дополнительную точку) при условии, что Bar загружен.
+0

Бар не загружен. Это для создания нового Foo. Со стандартными помощниками Html я хочу сделать Html.DropdownList («Foo.Bar», Model.Bars). –

+1

Затем вы должны либо (1) загрузить Bar, либо (2) захватить значение из BarReference.EntityKey.Values ​​[0]. Тем не менее, я никогда не использую сущности в качестве моделей представлений. Я создаю специализированные модели просмотра, которые соответствуют странице и записывают прогнозы L2E для их заполнения. Когда вы это делаете, вам никогда не придется беспокоиться о загрузке; он полностью автоматичен и не требует никаких размышлений с вашей стороны. –