Вопрос

NHibernate на самом деле не очень подходит для нашей среды из-за всех зависимостей.(Castle, log4net и т.д.)

Есть ли хорошая легкая альтернатива?

Необходима поддержка простых файловых баз данных, таких как Access / SQLite / VistaDB.

В идеале, что-то, содержащееся в одной сборке, которое ссылается только на сборки .NET.Если для этого требуется только .NET Framework 2.0 или 3.0, это бонус.

Это было полезно?

Решение

Вообще говоря, для работы с бэкэндом вашей базы данных .net для этого вам нужен ADO.Net провайдер.

Для MS Access (Jet) поставщик поставляется вместе с .net.Для SQLite существует автономный ADO.Сетевой провайдер.

Что касается библиотеки уровня доступа к данным, если вы хотите некоторую абстракцию над ADO.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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top