Я планирую использовать AutoMapper в предстоящем проекте и попытаться найти возможные «узкие места». На данный момент наиболее сложный случай, который я могу себе представить, следующий: Класс домена, который представлен таблицами 3 (например) в базе данных (мой уровень доступа к данным - LINQ to SQL). Для того, чтобы создать экземпляр класса мне нужно выполнить 3 запросы:Комплексные сопоставления DAL -> BL с использованием AutoMapper
- Выбор по ID из таблицы А (1 ряд, идет непосредственно к
Class
свойств) - Выбор по ID из таблицы B (0..1 строки, идет к дополнительным
Class.Code
собственности) - Выбор по ID из таблицы C (0..N строки, идет в
Class.Parameters
коллекции)
И я не уверен, как настроить отображение. Вот варианты я Рассмотренные:
- Выполните 3 запросов и отображения
Tuple<A,B,C>
->Class
- Объединить запросы 1 и 2 с помощью внешнего соединения (более эффективно). Но что мне делать с анонимным типом?
- Вставить datacontext в отображение, определить
A
->Class
сопоставление и позволить конверторам типа делать работу?
Никто не выглядит как победа. Что ты предлагаешь?
Редактировать: Ну, такие сложные случаи довольно редки (10-20%), и я могу сделать их вручную, а остальные 80-90% с AutoMapper просто отлично. Но я хотел бы знать, не является ли AutoMapper не для таких стратегий, или я пропускаю что-то важное.
Можно ли использовать представление базы данных для выполнения шагов 1-3? Тогда у вас может быть просто сопоставление 1: 1 между объектом вида и вашим классом. – PatrickSteele
Спасибо за ваш интерес! Технически я могу создать представление, которое выполняет внешнее соединение между 1 и 2, а затем полное соединение с 3, но такая денормализация определенно не то, что я хочу (увеличенный сетевой трафик с db плюс более сложная логика карты для обработки нулей, не так ли?) , – UserControl