Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top