Облегченные альтернативы NHibernate
-
01-07-2019 - |
Вопрос
NHibernate на самом деле не очень подходит для нашей среды из-за всех зависимостей.(Castle, log4net и т.д.)
Есть ли хорошая легкая альтернатива?
Необходима поддержка простых файловых баз данных, таких как Access / SQLite / VistaDB.
В идеале, что-то, содержащееся в одной сборке, которое ссылается только на сборки .NET.Если для этого требуется только .NET Framework 2.0 или 3.0, это бонус.
Решение
Вообще говоря, для работы с бэкэндом вашей базы данных .net для этого вам нужен ADO.Net провайдер.
Для MS Access (Jet) поставщик поставляется вместе с .net.Для SQLite существует автономный ADO.Сетевой провайдер.
Что касается библиотеки уровня доступа к данным, если вы хотите некоторую абстракцию над ADO.Net:
- МС Блок приложения для доступа к данным, являющийся частью корпоративная библиотека ms.
iBatis.Net(Был вышедший на пенсию фондом Apache Foundation в 2010 году) MyBatis.net- Вспомогательный шаблон с весны Framework.net
Все это хорошо работает, начиная с framework 2.0 и выше.
В основном, ты выбирайте (а вариантов очень много)
Другие советы
Массивный - https://github.com/robconery/massive
или
ПетаПоко - https://github.com/toptensoftware/petapoco
Оба представляют собой один файл .cs без каких-либо зависимостей, за исключением того, что находится в GAC.
(полное раскрытие, PetaPoco - это то, что я написал)
Для легкого ORM, который хорошо работает и требует всего одной сборки, почему бы не попробовать Скорость Света из Mindscape.Это не с открытым исходным кодом, однако исходный код доступен и стоит по разумной цене - риск, связанный с большинством ORM, которые не очень хорошо приняты, - это, конечно, качество и уровень поддержки, и есть очень мало других ORM с открытым исходным кодом, с которыми стоит беспокоиться.Чистое пространство на данный момент.
Из-за вашей неприязни к зависимостям NHibernate похоже, что вам не нужна платформа ведения журнала или какой-либо из аспектов проекта castle, т.Е.МоК, Монорельсовая дорога и т.д.Рассматривали ли вы, может быть, просто взять минимум требований NHibernate (log4net и коллекции Iesi, я полагаю, и динамический прокси из проекта castle?) и запустить ILMerge поверх них, чтобы объединить их в единую сборку - возможно, потребуется немного повозиться, но это не слишком сложно - или, в качестве альтернативы, вы могли бы просто перенести исходный код для каждого из этих проектов в пользовательскую сборку NHibernate, которую вы поддерживаете для своей организации, которая урезает функции, не требуемые вашим проектом / организацией - это не так сложно, как кажется, и я кое-что сделал в соответствии с этими строки для одного проекта, где мы хотели воспользоваться ORM, но нуждались в уменьшении размера распространяемых файлов / установщика.
Также - возможно, вы в состоянии объяснить, что, по вашему мнению, является слишком "тяжелым" в решении на основе Nhibernate...по моему опыту, это достаточно легкий фреймворк ORM по сравнению с некоторыми другими.
Дополняя этот список, вы также могли бы взглянуть на Щеголеватый (написан для самого StackOverflow и используется им).
некоторые из альтернативных вариантов:
- Активная запись - он использует nhibernate.dll в фоновом режиме, но настройка выполняется с помощью атрибутов.Это как облегченная версия nhibernate
- Дозвуковой
- CoolStorage.NET - Я часто использовал его в небольших проектах.Хорошо работает с большим количеством баз данных
Вот такой большой список из альтернатив, которые я бы порекомендовал:
- Хранение в холодильнике
- СУДА
- ODX
- Скорость света (бесплатно для 8 объектов или менее)
Эти 4 - самые легкие из них.Subsonic, ActiveRecord и другие предназначены для больших систем.Они прекрасно работают на небольших системах, но (по крайней мере, для ActiveRecord) поставляются с огромным списком зависимостей и излишеством для небольшой системы.Я бы выбрал Lightspeed и сказал, что все, что меньше 8 объектов, - это небольшая система, и простое использование NHibernate, потому что оно широко распространено, хорошо для масштабирования, но в краткосрочной перспективе не имеет смысла - и наличие слоя между ORM и вашими потребителями может обойти это в любом случае.
LINQ to SQL может быть хорошей альтернативой системам "heave" ORM, если вы будете использовать его должным образом.
Если вам не нужен полнофункциональный ORM, а просто нужен быстрый, независимый от базы данных слой данных поверх ADO.NET попробуйте open-source Библиотека NI.Data (V2).Он очень легкий (всего одна небольшая сборка, никаких других зависимостей), предоставляет всю стандартную инфраструктуру уровня данных:
- абстракция запроса и анализатор для его строкового представления под названием 'relex' (выглядит как:"книги (рейтинг=5)[title, id]" - очень хорошая альтернатива Linq-to-SQL, и выражения можно составлять "на лету")
- концепция "представления" для инкапсуляции сложных SQL-запросов, зависящих от синтаксиса базы данных
- триггеры передачи данных
- разрешения уровня данных для запросов выбора / обновления / удаления
- из коробки поддерживаются MS SQL, SQLite, MySQL, поставщики Odbc / OleDb (MS Access).Поддержка других баз данных SQL может быть легко добавлена.
Его основной компонент (DALC) инициализируется всего одной строкой кода:
var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);
вот и все.Если вам нужна поддержка среды выполнения .NET 2.0, вы можете попробовать скомпилировать либо последнюю версию V2 в среде выполнения 2.0, либо использовать предыдущую устаревшую версию (NI.Data.Dalc, V1).