Сегодня мы поговорим про то, как написать свой AutoMapper. Да, мне бы очень хотелось рассказать вам об этом, но я не смогу. Дело в том, что подобные решения очень большие, имеют историю проб и ошибок, а также прошли долгий путь применения. Я лишь могу дать понимание того, как это работает, дать отправную точку для тех, кто хотел бы разобраться с самим механизмом работы «мапперов». Можно даже сказать, что мы напишем свой велосипед.
Читать полностью »
Рубрика «automapper»
Свой mapper или немного про ExpressionTrees
2019-08-16 в 13:29, admin, рубрики: .net, automapper, C#, example, expression, expression trees, reflectionАдаптируем AutoMapper под себя
2019-03-23 в 9:33, admin, рубрики: .net, automapper, C#, roslyn, ПрограммированиеAutoMapper один из основных инструментов применяемых в разработке Enterprise приложений, поэтому хочется писать как можно меньше кода определяя маппинг сущностей.
Мне не нравится дублирование в MapFrom при широких проекциях.
CreateMap<Pupil, PupilDto>()
.ForMember(x => x.Name, s => s.MapFrom(x => x.Identity.Passport.Name))
.ForMember(x => x.Surname, s => s.MapFrom(x => x.Identity.Passport.Surname))
.ForMember(x => x.Age, s => s.MapFrom(x => x.Identity.Passport.Age))
.ForMember(x => x.Number, s => s.MapFrom(x => x.Identity.Passport.Number))
Я бы хотел переписать так:
CreateMap<Pupil, PupilDto>()
.From(x=>x.IdentityCard.Passport).To()
Получаем данные enum в проекции Automapper
2019-02-08 в 8:04, admin, рубрики: .net, automapper, C#, ef, EF Core, expressionНемного ликбеза
Я очень люблю Automapper, особенно его QueryableExtensions и метод ProjectTo<>. Если вкратце, то данный метод позволяет делать проекцию типов прямо в SQL-запросе. Это позволяло получать dto фактически из базы данных. Т.е. не нужно получать две entity из базы, грузить их в память, применять Automapper.Map<>
, что приводило к большому расходу и трафику памяти.
FlashMapper — альтернатива автомапперу
2017-09-29 в 8:50, admin, рубрики: .net, automapper, C#, flashmapper, ПрограммированиеЯ даже не знаю, что такое автомаппер. Зачем мне его альтернатива?
Представьте ситуацию, у вас есть два класса для одной и той же сущности, один описывает модель данных с пользовательской формы, второй модель базы данных. Свойства этих классов совпадают процентов на 95, различия могут быть только в каких-то временных метках или прочих системных полях в модели базы данных. Когда пользователь заполняет форму, вы получаете модель с этой формы, и дальше вам надо преобразовать ее к модели базы данных, чтобы сохранить.
FlashMapper, как и AutoMapper, это .net-библиотека, которая избавляет вас от написания рутинного кода в процессе преобразования. Он автоматически сопоставляет все одинаковые свойства классов, оставляя вам только необходимость разрешить различия.
Помимо избавления от рутинной работы, данный подход дает дополнительную проверку правильности кода вашей программы. Представьте, что вы добавили какие-то новые свойства в эти классы, и забыли их связать. В лучшем случае вы узнаете об этом где-нибудь на этапе тестирования, в худшем спустя месяц после релиза, когда заметите, что у вас в базе данных не появляются новые данные, которые старательно вводят пользователи в новое поле на форме. FlashMapper же либо сам свяжет новые свойства автоматически, если сможет, либо выбросит исключение во время следующего запуска приложения.
Читать полностью »
Немного о нетрадиционном маппинге
2016-08-08 в 16:42, admin, рубрики: .net, automapper, C#, Анализ и проектирование систем, метки: automapperМногие знают про отличную библиотеку Automapper. С преобразованием Entity -> Dto проблем обычно не возникает. Но как обрабатывать обратный маппинг в случае, когда в API приходит корень агрегации? Хорошо, если read и write — контексты разделены и писать можно из Dto. Чаще, однако, нужно выбрать соответствующие сущности из ORM по Id и сохранить агрегат целиком. Занятие это муторное, однако зачастую поддающееся автоматизации.
Читать полностью »