Альтернативный сопоставитель объектов BLToolkit, поддерживающий хранимые процедуры
Я не слишком большой поклонник direct entity mappers, потому что я все еще думаю, что SQL-запросы являются самыми быстрыми и оптимизированными при написании вручную непосредственно на базе данных и для базы данных (с использованием правильных соединений, группировок, индексов и т. д.).
в моем текущем проекте я решил попробовать BLToolkit, и я очень доволен его оберткой Ado.net и скорость, поэтому я запрашиваю базу данных и получаю сильные объекты типа C#. Я также написал T4, который генерирует хранимые процедуры помощники!--4--> поэтому мне не нужно использовать магические строки при вызове хранимых процедур, поэтому все мои вызовы используют сильные типы для параметров.
в основном все мои вызовы CRUD выполняются с помощью хранимых процедур, потому что многие из моих запросов не являются простыми операторами select, и особенно мои создания и обновления также возвращают результаты, которые легко выполняются с помощью хранимой процедуры, выполняющей только один вызов. В любом случае...
минус
самый большой недостаток BLToolkit (Я хочу, чтобы все оценки BLToolkit знать это) - это не его возможности или скорость, а его очень скудная документация, а также поддержка или ее отсутствие. Поэтому самая большая проблема с этой библиотекой-это проб и ошибок, чтобы заставить его работать. Вот почему я не хочу использовать слишком много разных частей, потому что чем больше я использую, тем больше проблем придется решать самостоятельно.
вопрос
какие альтернативы у меня есть для BLToolkit что:
- поддержка использования хранимых процедур, которые возвращают любые объекты, которые я предоставляю, которые не обязательно совпадают с таблицами DB
- предоставьте хороший объект mapper от чтения данных до объектов
- поддерживает отношения (все из них)
- дополнительная (но желательная) поддержка нескольких результатов
- не требует специальной настройки (я использую только строку подключения к данным и ничего else)
в основном он должен быть очень легким, в основном должен иметь простой Ado.net обертка и сопоставитель объектов.
и самое важное требование: проста в использовании, хорошо поддерживается и сообщество использует его.
1 ответов
Альтернативы (Май 2011 Года)
я вижу большие пушки преобразовали свои стратегии доступа к инструментам micro ORM. Я играл с той же идеей, когда оценивал BLToolkit, потому что он казался громоздким (1.5 MB) для функциональности, которую я бы использовал. В конце концов я решил написать вышеупомянутый T4 (ссылка в вопросе), чтобы облегчить мою жизнь при вызове хранимых процедур. Но есть еще много возможностей внутри BLToolkit, которые я не использую вообще или даже понять (причины также указаны в вопросе).
лучшая альтернатива микро ОРМ инструменты. Может быть, лучше позвонить им?--16-->микро-картографы объектов. Все они преследуют одни и те же цели:--20-- > простота и экстремальная скорость. Они не следуют за NoSQL парадигма их больших собратьев ORMs, поэтому большую часть времени мы должны писать (почти) каждый день TSQL для питания своих запросов. Они получают данные и сопоставляют их с объектами (а иногда предоставляют что - то еще-проверьте ниже).
я хотел бы указать на 3 из них. Все они представлены в одном файле кода, а не в виде скомпилированной DLL:
-
щеголеватый - используется Stackoverflow сам; все, что он на самом деле делает, это предоставляет общие методы расширения над
IDbConnection
Что означает, что он поддерживает любое резервное хранилище данных, пока есть класс соединения, который реализуетIDbConnection
взаимодействие;- использует параметризованный SQL
- карты для статических типов, а также
dynamic
(.чистая 4+) - поддерживает сопоставление с несколькими объектами на запись результата (как в 1-1 отношениях ie.
Person
+Address
) - поддерживает отображение нескольких результирующих объектов
- поддерживает хранимых процедур
- сопоставления генерируются, компилируются (MSIL) и кэшируются - это также может быть недостатком, если вы используете огромное количество типы)
-
огромные - автор Роб Коннери;
- поддерживает только
dynamic
тип отображения (нет поддержки в .net 3.5 или старше ребенка) - чрезвычайно мал (несколько сотен строк кода)
- предоставляет
DynamicModel
класс, который наследуют ваши сущности и предоставляет CRUD functionaly или карты из произвольного baremetal TSQL - косвенная поддержка подкачки
- поддерживает колонки сопоставление имен (но вы должны делать это каждый раз при доступе к данным в отличие от декларативных атрибутов)
- поддерживает хранимые процедуры, написав прямой параметризованный TSQL
- поддерживает только
-
PetaPoco - вдохновил мой массивный, но с требованием поддерживать более старые версии фреймворка
- поддерживает сильные типы, а также
dynamic
- предоставляет шаблон T4 для создания ваших POCOs - вы получите аналогичные классы как большие коллеги ORMs (что означает, что code-first не поддерживается) но вы не должны использовать эти вы все еще можете написать свои собственные классы POCO, конечно, чтобы сохранить вашу модель легкой и не включать только информацию о БД (т. е. метки времени etc.)
- подобно Dapper он также компилирует сопоставления для скорости и повторного использования
- поддерживает операции CRUD +
IsNew
- неявная поддержка подкачки, которая возвращает специальный тип со страницей, полной данных + все метаданные (текущая страница, количество всех страниц / записей)
- имеет точку расширения для различных сценариев (лесозаготовки, конвертеры типа и т. д.)
- поддерживает декларативные метаданные (сопоставления столбцов/таблиц и т. д.)
- поддерживает отображение нескольких объектов на запись результата с некоторые автоматическая настройка отношений (в отличие от Dapper, где вам нужно вручную подключить связанные объекты)
- поддерживает хранимых процедур
- есть помощник
SqlBuilder
класс для легче строить операторы TSQL
- поддерживает сильные типы, а также
из всех трех PetaPoco кажется самым живым с точки зрения развития и поддержки большинства вещей, взяв лучшее из двух других (и некоторых других).
из всех трех Dapper имеет лучшую ссылку на использование в реальном мире, потому что он используется одним из самых высоких сайтов трафика в мире: Stackoverflow.
они все страдают от проблемы magic string, потому что вы пишете SQL-запросы большую часть времени прямо в них. Но некоторые из них могут быть смягчены T4, поэтому у вас могут быть сильные типизированные вызовы, которые обеспечивают intellisense, проверку времени компиляции и повторное поколение на лету в Visual Studio.
минус dynamic
тип
Я думаю, что самый большой недостаток dynamic
типы обслуживания. Представьте, что ваше приложение использует динамические типы. Просмотр собственного кода через некоторое время станет довольно проблематичным, потому что у вас нет никакого конкретного занятия, чтобы наблюдать или держаться. Как dynamic
типы-это благословение, они также проклятие в долгосрочной перспективе.