Как отключить преобразование автоматического списка AutoMapper между List<T> и EntitySet<T>?
Я сопоставляю свои сгенерированные сущности Linq-To-SQL с DTO, используя AutoMapper.
Когда я изначально создавал модульные тесты, у меня были специальные карты (через класс статической конфигурации), настроенные для преобразования одного типа EntitySet в общий список (и наоборот)
Mapper.CreateMap<EntitySet<Member>, List<MemberDTO>>();
Mapper.CreateMap<List<MemberDTO>, EntitySet<Member>>();
После удаления списка преобразований (когда выяснилось, что AutoMapper преобразует их автоматически), мои модульные тесты все еще работали, но они замедлились до сканирования. Это было так заметно медленно, что для выполнения каждого теста потребовалась буквально минута.
После повторного добавления сопоставлений списков модульные тесты возобновили свою нормальную производительность.
Есть ли способ отключить это автоматическое преобразование для списков, чтобы у меня была необходимость сопоставлять преобразования списков? Я хотел бы, чтобы он генерировал исключение AutoMapperException, если мне не удалось включить карту. Я хотел бы избежать этих проблем с производительностью.
Если хуже становится хуже, я мог бы просто написать шаблон быстрой генерации кода для автоматического создания моего класса конфигурации сопоставления на основе DTO. Таким образом, я ничего не пропущу.
Благодарю.
2 ответа
Любой вызов CreateMap не должен происходить более одного раза для одного AppDomain, который включает в себя как тесты, так и рабочий код. У нас есть статический метод, двойная проверка заблокирована, чтобы гарантировать, что конфигурация происходит только один раз. Конфигурация кэшируется статически, поэтому нет необходимости делать это более одного раза.
Однако эти преобразования должны "просто работать", если у вас настроены Member -> MemberDTO и наоборот. Я проведу пару тестов дыма для List<> -> EntitySet<>, чтобы убедиться, что он работает нормально.
Оказывается, вы не можете просто отключить автоматическое преобразование. Я смотрел почти везде, и, кажется, нет никакого реального способа сделать это.
А пока я пишу все сопоставления вручную.