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

NHibernate или LINQ to SQL

Если вы начинаете новый проект, что бы вы использовали для ORM NHibernate или LINQ и почему. Каковы плюсы и минусы каждого из них.

edit: LINQ to SQL не просто LINQ (спасибо @Jon Limjap)

4b9b3361

Ответ 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.

Возможно, вы имеете в виду, что использовать:

  • LINQ to SQL
  • 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. Чтобы обойти это, вам нужно воссоздать деревья выражений, которые трудно сделать.