NHibernate или LINQ to SQL
Если вы начинаете новый проект, что бы вы использовали для ORM NHibernate или LINQ и почему. Каковы плюсы и минусы каждого из них.
edit: LINQ to SQL не просто LINQ (спасибо @Jon Limjap)
Ответы
Ответ 1
Я задал себе очень похожий вопрос, кроме того, что вместо NHibernate я думал о WilsonORM, который я считаю довольно приятным.
Мне кажется, что существует много важных различий.
LINQ:
- не является полным инструментом ORM (вы можете получить там некоторые дополнительные библиотеки, такие как новейшая инфраструктура Entity). Я лично считаю, что архитектура этой новейшей технологии от MS составляет около 10 лет по сравнению с другими структурами ORM)
- в первую очередь запрашивает "язык", поддерживающий intellisense (компилятор проверяет синтаксис вашего запроса).
- в основном используется с Microsoft SQL Server
- - закрытый источник
NHibernate:
- - инструмент ORM
- имеет довольно ограниченный язык запросов без intellisense.
- может использоваться практически с любой СУБД, для которой у вас есть поставщик БД
- является открытым исходным кодом.
Это действительно зависит. Если вы разрабатываете настольное приложение Rich (Windows), в котором вам нужно создавать объекты, работать с ними и, в конце концов, сохранять свои изменения, я бы рекомендовал структуру ORM, такую как NHibernate.
Если вы разрабатываете веб-приложение, которое обычно просто запрашивает данные и только изредка записывает некоторые данные обратно в БД, тогда я бы рекомендовал хороший язык запросов, например Linq.
Итак, как всегда, это зависит.: -)
Ответ 2
Errr... there LINQ для NHibernate.
Возможно, вы имеете в виду, что использовать:
Я предпочитаю NHibernate.
LINQ to SQL довольно легкий, но он немного более тесно связан с вашей структурой данных, в отличие от NHibernate, который довольно гибкий с точки зрения типов определений объектов, которые могут быть сопоставлены с вашими структурами таблиц.
Конечно, чтобы не сказать, что LINQ to SQL не использует: этот сайт использует его. Я считаю, что очень полезно вставать и работать в небольших приложениях, где схема базы данных не такая массивная.
Ответ 3
Начать с NHibernate - плохая идея. Он показывает хорошую производительность только с хорошими настройками. Попытайтесь использовать EFv4 для больших проектов и L2S (возможно, продукты третьей части) для малого и среднего размера. Эти продукты более удобны и гибки, чем NHibernate, и позволяют быстро начать работу.
Ответ 4
не полный список
LinqToSql
Pro:
- лучшая поддержка инструментов
- хороший поставщик linq
- легко начать с того, когда db-schema == classes -
Con:
- не является гибким (т.е. db-schema!= classes)
- поддерживает только MS SQL Server
- no cascading (сохранить, обновить... не каскадно ссылается на объекты)
NHibernate
Pro:
- много rdbms поддерживается ootb
- многофункциональный
- очень гибкий для почти всех угловых случаев
- с открытым исходным кодом
Con:
- Не так легко начать с
- не от MS
- Есть много инструментов, но вы должны искать
Между двумя ORM
я бы выбрал LinqToSql, если:
- db-schema == classes
- использовать MS SQL Server
- магазин разрешает только MS-продукты
Я бы выбрал Nhibernate, если:
- более богатый объектмодель
- legacy db-schema
- DB, кроме MS SQL Server, или поддержка нескольких
- производительность критическая (я думаю, что NH имеет больше возможностей для оптимизации производительности, чем LinqToSql)
ПРИМЕЧАНИЕ: это мое личное мнение. Я имею дело в основном с (сумасшедшими) устаревшими dbs и сложными задачами ETL, где объектная модель много помогает SQL.
Ответ 5
Я не использую (или даже знаю) NHibernate, я просто хочу дать свои показания: я использую LINQ to SQL примерно через 2 года с базами данных MySQL и PostgreSQL (используя DbLinq в Windows, используя Mono в Linux и Mac OS X).
Таким образом, LINQ to SQL не ограничивается продуктами Microsoft.
Я могу подтвердить, что LINQ to SQL очень хорошо подходит для небольших и средних проектов или больших проектов, где у вас есть абсолютный контроль над структурой базы данных.
Как показывают обзоры, LINQ to SQL имеет некоторые ограничения, которые делают его неприемлемым инструментом, когда нет прямого сопоставления между таблицами базы данных и классами сущностей.
Примечание. LINQ to SQL не поддерживает отношения "многие ко многим" (но это может быть легко достигнуто с помощью нескольких строк кода).
Ответ 6
Основным недостатком NHibernate является невозможность использовать вызовы методов. Они не могут быть переведены на SQL. Чтобы обойти это, вам нужно воссоздать деревья выражений, которые трудно сделать.