ASP.NET MVC: передовой опыт или шаблон проектирования для получения DTO / EditModel в базу данных - PullRequest
3 голосов
/ 12 ноября 2010

Я использую AutoMapper для создания DTO для ViewModel и EditModel. Я не могу найти хороший пример того, как взять EditModel и применить изменения, которые он содержит, к базе данных.

Сначала я рассмотрел использование AutoMapper в качестве двустороннего механизма, но это явно не рекомендуется: http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/09/17/the-case-for-two-way-mapping-in-automapper.aspx

Итак, каков наилучший способ (шаблон проектирования) для передачи DTO или EditModel из контроллера в хранилище данных?

ОБНОВЛЕНИЕ: основываясь на некоторых ответах, я должен упомянуть, что я использую шаблон проектирования Repository и Entity Framework.

ОБНОВЛЕНИЕ: Мой вопрос слишком субъективен, поскольку для этого нет общей практики. Я пришел к выводу, что многие люди используют AutoMapper в обоих направлениях, даже если другие не рекомендуют его.

Ответы [ 4 ]

1 голос
/ 12 ноября 2010

В простейшей форме вам просто нужно использовать AutoMapper для сопоставления вашей модели с вашим объектом Domain / DTO, а затем сохранить это в хранилище данных, как бы вы это ни делали.

Что-то, что в значительной степени связано с одним из проектов, которые я сделал:

Mapper.Map(modelObject, domainObject);
domainObject.Save();
return domainObject.Id;

Возможно, вы захотите вернуть идентификатор любого метода, который вы вызываете, чтобы вы могли использовать его дальше. Это просто грубый пример, но в этом его основа ...

EDIT: Строка: Mapper.Map помещает данные ViewModel в объект Domain. Оттуда Save() вызывает все, что вам нужно. В вашем случае это будет ваш IRepository.Save() метод. Для меня это вызов в nHibernate's SaveOrUpdate

В моей конфигурации AutoMapper у меня есть что-то вроде:

Mapper.CreateMap<OrderDomain, OrderViewDTO>();

и

Mapper.CreateMap<OrderSaveDTO, OrderDomain>();

Это помогает?

0 голосов
/ 16 ноября 2010

NHibernate - лучший способ сопоставить ваши DTO с таблицами вашей базы данных.Entity Framework еще не готов к прайм-тайм, как ASP.NET MVC.Лучше всего использовать веб-формы с помощью NHibernate.

0 голосов
/ 12 ноября 2010

Я использую AutoMapper, чтобы идти в обоих направлениях. Вам просто нужно быть уверенным, что вы обрабатываете любые коллекции самостоятельно при отображении. AutoMapper прекрасно работает для выравнивания структуры, но не так хорошо для ее восстановления.

0 голосов
/ 12 ноября 2010

Там будет много возможных ответов на ваш вопрос, слишком много, чтобы перечислить здесь. Тем не менее, я думаю, что то, что вы хотите исследовать дальше, называется ORM или Object Relational Mapper. Некоторые из наиболее распространенных вариантов - это NHibernate и Entity Framework. Это позволит вам брать объекты в вашем приложении и отображать их в базу данных.

AutoMapper - отличный инструмент, но я считаю, что целью является отображение между объектами (например, моделью представления и сущностью).

РЕДАКТИРОВАТЬ: И, учитывая ваши вопросы о шаблонах проектирования, я бы посоветовал изучить шаблон Repository - он хорошо работает с ASP.NET MVC и существует множество примеров.

...