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

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

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

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

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


person Andreas    schedule 18.09.2008    source источник


Ответы (8)


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

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

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

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

По сути, вы выбираете (а вариантов много)

person RHeitzmann    schedule 18.09.2008

Массивный — https://github.com/robconery/massive

or

PetaPoco — https://github.com/toptensoftware/petapoco

Оба представляют собой один файл .cs без каких-либо зависимостей, кроме того, что находится в GAC.

(полное раскрытие, PetaPoco - это то, что я написал)

person Brad Robinson    schedule 18.03.2011
comment
Simple.Data тоже стоит посмотреть. - person asgerhallas; 25.03.2011
comment
любой ORM можно превратить в один файл .cs - person nawfal; 20.02.2013

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

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

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

person Bittercoder    schedule 18.09.2008
comment
Hibernate действительно хорош, но если мы говорим о высокоэффективном микро ORM, я бы определенно предложил Dapper. Обычно разработчики .net выбирают между Entity Framework (сначала код) и Dapper (сначала база данных) - person Plixxer; 20.06.2019

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

person Richard Banks    schedule 16.08.2011
comment
Очень хорошая библиотека - простота - это утерянная форма искусства! - person Mike Perrenoud; 22.08.2012

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

person Hrvoje Hudo    schedule 18.09.2008

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

  • Холодильное хранилище
  • СОДА
  • ОДХ
  • Lightspeed (бесплатно для 8 объектов или меньше)

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

person Chris S    schedule 15.04.2009
comment
Срок действия этой ссылки истек, новое местоположение — shrinkrays. сеть/статьи/ - person Andrew M; 12.11.2009

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

person dimarzionist    schedule 18.09.2008
comment
LINQ to SQL поддерживает только SQL Server — в плакате говорилось, что поддержка баз данных на основе файлов имеет решающее значение. - person Sean Carpenter; 22.10.2008
comment
LINQ to SQL поддерживает базу данных на основе файлов — Microsoft SQL Server Compact, доказательство: pietschsoft.com/post/2009/01/ - person too; 21.08.2012

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

  • абстракция запроса и парсер для его строкового представления под названием «relex» (это выглядит так: «books(rating=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).

person Vitaliy Fedorchenko    schedule 07.05.2014