NHibernate или LINQ для SQL [закрыт]
-
09-06-2019 - |
Вопрос
Если вы начинаете новый проект, что бы вы использовали для своего ORM NHibernate или LINQ и почему.Назовите плюсы и минусы каждого из них.
Редактировать:LINQ для SQL, а не просто LINQ (спасибо @Jon Limjap)
Решение
Я задавал себе очень похожий вопрос, за исключением того, что вместо NHibernate я думал о WilsonORM, который я считаю довольно приятным.
Мне кажется, что есть много важных различий.
LINQ:
- не является полноценным инструментом ORM (вы можете получить его с некоторыми дополнительными библиотеками, такими как последняя версия Entity Framework - лично я считаю, что архитектуре этой новейшей технологии от MS около 10 лет по сравнению с другими фреймворками ORM)
- в первую очередь запрашивает "язык", поддерживающий intellisense (компилятор проверит синтаксис вашего запроса)
- в основном используется с Microsoft SQL Server
- является закрытым исходным кодом
NHibernate на:
- является ли ORM инструментом
- имеет довольно ограниченный язык запросов без intellisense
- может использоваться практически с любой СУБД, для которой у вас есть поставщик БД
- является открытым исходным кодом
Это действительно зависит от обстоятельств.Если вы разрабатываете многофункциональное настольное приложение (Windows), где вам нужно создавать объекты, работать с ними и в конце сохранять их изменения, то я бы порекомендовал ORM-фреймворк, такой как NHibernate.
Если вы разрабатываете веб-приложение, которое обычно просто запрашивает данные и лишь изредка записывает некоторые данные обратно в базу данных, то я бы порекомендовал хороший язык запросов, такой как Linq.
Так что, как всегда, все зависит от обстоятельств.:-)
Другие советы
Ошибаюсь...там есть LINQ для NHibernate.
Возможно, вы имеете в виду, что использовать:
- ССЫЛКА на SQL
- NHibernate на
Я предпочитаю NHibernate.
LINQ to SQL довольно легкий, но он немного более тесно связан с вашей структурой данных, в отличие от NHibernate, который довольно гибок с точки зрения типов определений объектов, которые могут быть сопоставлены с вашими табличными структурами.
Конечно, это не значит, что LINQ to SQL бесполезен:этот самый веб-сайт использует его.Я считаю, что это весьма полезно для запуска в небольших приложениях, где схема базы данных не такая массивная.
Начинать с NHibernate - плохая идея.Он показывает хорошую производительность только при умелых настройках.Попробуйте использовать EFv4 для крупных проектов и L2S (возможно, продукты из третьей части) для малого и среднего размера.Эти продукты более удобны и гибки, чем NHibernate, и позволяют вам быстро приступить к работе.
это далеко не полный список
LinqToSql Pro:
- улучшенная поддержка инструментов
- хороший поставщик linq
- легко начать с того, что db-schema == классы -
Con:
- не гибкий (т.е. db-schema != классы)
- поддерживает только MS SQL Server
- нет каскадирования (сохранение, обновление ...не переходит каскадом к объектам, на которые даны ссылки)
NHibernate на Профессиональный:
- многие СУБД поддерживали ootb
- многофункциональный
- очень гибкий практически для всех угловых корпусов
- открытый исходный код
Con:
- начать не так-то просто
- не от MS
- есть много инструментов, но вы должны искать
Между двумя ORMS
я бы выбрал LinqToSql, если:
- db-схема == классы
- используйте только MS SQL Server
- магазин допускает только MS-Продукты
я бы выбрал Nhibernate, если:
- более богатая объектная модель
- устаревшая схема базы данных
- База данных, отличная от MS SQL Server или поддерживающая несколько
- критичная производительность (я думаю, что у NH больше возможностей для оптимизации производительности, чем у LinqToSql)
ПРИМЕЧАНИЕ:это мое личное мнение.Я имею дело в основном с (сумасшедшими) устаревшими базами данных и сложными заданиями ETL, где объектная модель очень помогает по сравнению с SQL.
Я не использую (и даже не знаю) NHibernate, я просто хочу дать свое свидетельство:Я использую LINQ to SQL примерно с 2-х лет с базами данных MySQL и PostgreSQL (используя DbLinq в Windows, используя Моно в Linux и Mac OS X).
Таким образом, LINQ to SQL НЕ ограничивается продуктами Microsoft.
Я могу подтвердить, что LINQ to SQL очень хорошо подходит для небольших и средних проектов или крупных проектов, где у вас есть абсолютный контроль над структурой базы данных.Как показывают обзоры, LINQ to SQL имеет некоторые ограничения, которые делают его неподходящим инструментом, когда нет прямого сопоставления между таблицами базы данных и классами сущностей.
Примечание :LINQ to SQL не поддерживает отношения "многие ко многим" (но этого можно легко достичь с помощью нескольких строк кода).
Основным недостатком NHibernate является невозможность использовать вызовы метода.Они не могут быть переведены в SQL.Чтобы обойти это, вам нужно воссоздать деревья выражений, что сделать сложно.