Подтвердить что ты не робот

Легкие альтернативы NHibernate

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

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

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

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

4b9b3361

Ответ 1

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

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

Что касается уровня доступа к данным lib, если вы хотите абстракцию через ADO.Net:

Все работают хорошо, начиная с фреймворка 2.0 и выше.

В принципе, вы выбираете (и есть много вариантов)

Ответ 3

Для облегченного ORM, который хорошо работает и требует только одну сборку, почему бы не попробовать Lightspeed из Mindscape. Это не open-source, однако источник доступен и по разумной цене - риск с большинством ORM, которые не очень хорошо приняты, конечно же, качество и уровень поддержки, и очень мало других ORM с открытым исходным кодом стоит беспокоиться. Чистое пространство на данный момент.

Из-за вашей неприязни к зависимостям NHibernate это звучит так, как будто вам не нужны рамки ведения журнала или любые грани проекта проекта, например IoC, Monorail и т.д. Считаете ли вы, что, возможно, просто выполняете минимальные требования NHibernate ( log4net и коллекции Iesi, которые, как я полагаю, и динамический прокси из проекта замка?) и запуск ILMerge над ними для консолидации их в единую сборку - может немного поиграть, но это не слишком сложно - или, альтернативно, вы можете просто потянуть исходный код для каждого из этих проектов в пользовательскую сборку NHibernate, которую вы поддерживаете для своей организации, которая обрезает функции, не требуемые вашим проектом/организацией, - это не так сложно/неудобно, как это звучит, и я сделал что-то в этом направлении для один проект, в котором мы хотели использовать ORM, но необходимо было уменьшить размер распределенных файлов/установщика.

Кроме того, возможно, вы можете объяснить, что вы чувствуете, слишком "тяжело" в отношении решения на основе Nhibernate... по моему опыту, это достаточно легкая структура ORM по сравнению с некоторыми.

Ответ 4

Добавив к этому списку, вы также можете взглянуть на Dapper (написанный и используемый самим StackOverflow).

Ответ 5

некоторые из альтернатив:
- ActiveRecord - в фоновом режиме используется nhibernate.dll, но настройка выполняется с помощью атрибутов. Это похоже на облегченную версию nhibernate
- Subsonic
- CoolStorage.NET - Я использовал его много с небольшими проектами. Хорошо работает с количеством dbs

Ответ 6

Здесь большой список альтернатив, которые я бы рекомендовал:

  • камера Установка
  • SOODA
  • ODX
  • Lightspeed (бесплатно для 8 объектов или менее)

Те 4 являются самыми светлыми. Subsonic, ActiveRecord и другие предназначены для больших систем. Они отлично работают на небольших системах, но (по крайней мере для ActiveRecord) поставляются с огромным списком зависимостей и избыточным количеством для небольшой системы. Я бы пошел с Lightspeed и сказал что-нибудь под 8 объектами - это небольшая система, и просто используя NHibernate, потому что он широко принят, хорош для масштабирования, но в краткосрочной перспективе не имеет смысла - и наличие слоя между ORM и вашими потребителями может работать вокруг этого в любом случае.

Ответ 7

LINQ to SQL может быть хорошей альтернативой "перехватывать" системы ORM, если вы будете использовать его правильно.

Ответ 8

Если вам не нужна полнофункциональная ORM и вам нужен быстрый уровень данных, не зависящий от базы данных, над ADO.NET попробуйте open-source NI.Data library ( V2). Он очень легкий (только одна небольшая сборка, никаких других зависимостей), обеспечивает всю стандартную инфраструктуру уровня данных:

  • абстракция запроса и парсер для его строкового представления, называемого 'relex' (это выглядит так: "books (rating = 5) [title, id]" - очень хорошая альтернатива Linq-to-SQL, и выражения могут быть составлены на летать)
  • 'view' для инкапсуляции сложных зависимых от 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).