Смягчение двойного картирования накладных расходов - PullRequest
0 голосов
/ 27 января 2009

После долгих раздумий я решил использовать Linq To SQL в качестве DAL для моего проекта, но оставить бизнес-объекты как объекты POCO.

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

Я думаю о создании некоторых методов для извлечения или завершения объектов LINQ в объекты POCO с использованием Reflection. Этот метод должен попытаться заполнить все свойства одинаковыми именами.

Вопрос:
Знаете ли вы лучший способ сделать отображение?

Разъяснения:
1. Я не хочу использовать NHibernate, Entities и т. Д.
2. Я знаю, что отражение медленное

Ответы [ 2 ]

2 голосов
/ 11 февраля 2009

Возможно, вы захотите взглянуть на что-то вроде AutoMapper Джимми Богарда, которое в значительной степени соответствует тому, о чем вы говорите. Он загружен на CodePlex и GoogleCode , если вы хотите взглянуть на это.

0 голосов
/ 27 января 2009

Создать статический класс "Копир". Статический конструктор для этого класса может отражать T и U и использовать DynamicMethod для генерации кода (просматривайте свойства каждого, посмотрите, какие из них выстроены в очередь). Таким образом, цена отражения оплачивается один раз. Оттуда это будет нормальный вызов делегата, который должен быть достаточно быстрым.

Проблема, с которой вы можете столкнуться, заключается в том, что простое копирование полей с одинаковыми именами становится несколько ограничивающим, когда что-то не совпадает идеально. Возможно, вы захотите использовать отражение и сгенерировать код, который сделает преобразования за вас, а затем исправить их вручную.

...