Приложение MVC 2 с реляционной БД и объектными обертками - как получить реляционные данные в представлениях?

Недавно я провел рефакторинг своего приложения со следующим: Linq to SQL db connection Объекты для обертывания классов linq to sql Mappers для сопоставления между объектами и объектами Linq to Sql Сервисный уровень для вызова репозитория, передачи объектов в пользовательский интерфейс .

Раньше я просто использовал объекты Linq to SQL в своем пользовательском интерфейсе (я знаю). Но при отображении отношений это было так просто. Например:

У меня есть способ под названием SchoolProfile и таблица под названием School. У пользователя есть SchoolProfile (со средним баллом, рейтингом и т. д.), который ссылается на школу. Добавление функциональности в Школу было простым — потому что у него нет внешних ключей.

При создании формы для пользователя, чтобы перечислить все SchoolProfiles - они не хотят видеть SchoolId. Раньше, на мой взгляд, это было бы просто schoolprofile.School.Name. Теперь ShoolProfile — это «плоский» объект в моих ViewData без свойств. Я думаю, я мог бы создать другие классы, чтобы получить связанные данные (название школы и т. д.), но это выглядит грязно. Какие-либо предложения?


person Jack    schedule 11.08.2010    source источник


Ответы (1)


Я предлагаю взглянуть на ViewModels и AutoMapper. По сути, вы создадите конкретную ViewModel для своего представления и можете включить SchoolName в качестве свойства этой ViewModel. Затем вы можете использовать AutoMapper для простого сопоставления вашей модели предметной области (формы Linq to Sql) с вашей ViewModel.

По сути, вы хотите, чтобы ваше представление получало всю необходимую информацию от модели представления. Так что создавайте ViewModel на основе всей информации, которую вам нужно отобразить. Так что все, что ему нужно сделать, это взять то, что есть во ViewModel, и выплюнуть это.

person Jeff Treuting    schedule 11.08.2010
comment
Это очень интересно - мне нравятся функции AutoMapper. Прямо сейчас я не хочу загружать свое приложение сторонними инструментами (оно все еще довольно простое), но чтение документации и просмотр некоторых видео дали мне идею. Я просто создам свойства для своих объектов, которые не связаны напрямую ни с чем в классе linq to sql. Затем сопоставьте их с моими картографами, используя средства доступа к свойствам linq to sql. Спасибо! - person Jack; 11.08.2010