Не рекомендуется использовать Automapper для сопоставления модели с вашим объектом. Зависимости или информация могут быть перезаписаны, если они не используются с умом. Но использовать его, как вы хотите, вам нужно только, чтобы создать карту из вашей модели в вашей Сущности, а затем вызвать
Mapper.Map(myModel, myEntity);
отображение к сущности проблемы
Я предполагаю, что вы используете ORM, как NHibernate или EF, то ваши Entites - это Proxies, где ссылки также являются прокси-серверами и так далее. Теперь представьте себе, что у вас есть проект ASP.NET MVC и вы привязываете свой Entity к своей ViewModel. Вы показываете свою модель в своем представлении как форме, но вы показываете только те свойства, которые вам нужны в вашем представлении, а не все, что задано в вашей модели ViewModel. Затем пользователь отправляет форму обратно вам, и ваш контроллер получает ViewModel обратно, но на этот раз не все свойства установлены, потому что ваш вид только знал те, которые были показаны. Если вы переместите свой ViewModel обратно в свою сущность, все униализированные свойства находятся в состоянии по умолчанию и будут перезаписывать действительные данные для вашего объекта.
Другая проблема заключается в том, что AutoMapper использует Reflections для установки свойств. Обычно право на существование для ORM - это возможность легко реализовать DomainLayer. У DomainLayer есть некоторые Validations, Calculation ... на самом Entity. Если теперь Свойства, заданные с Reflection, он будет игнорировать логику Business, и не будет выполнено Validation, Calculations .....
Так что мой совет: не сопоставлять с объектами;)
Спасибо за ваш ответ. Вы упомянули, что будьте осторожны в отношении зависимостей/информации. Что может быть потеряно? Все, что мы хотим сделать, это скопировать значения полей из одного в другое. Еще раз спасибо. – user2981411
Рад, что я мог помочь;) Я отредактировал свой ответ, чтобы принести немного больше света. – Rabban
Спасибо за понимание. Первая проблема именно в том, почему я хочу использовать ViewModel, так что и инициализирован, и неинициализирован - то есть независимо от того, какой вид ViewModel должен быть передан Entity, но ничего другого. Вторая проблема заключается в том, что если вы примените свою логику проверки и аннотации данных и т. Д. К ViewModel, вы получите такое же поведение, как если бы оно было применено к Entity. Infact мы применили интерфейс IValidatableObject и аннотации данных к модели View, которая работает. – user2981411