Если вы начинаете новый проект, что бы вы использовали для ORM NHibernate или LINQ и почему. Каковы плюсы и минусы каждого из них.
edit: LINQ to SQL не просто LINQ (спасибо @Jon Limjap)
Если вы начинаете новый проект, что бы вы использовали для ORM NHibernate или LINQ и почему. Каковы плюсы и минусы каждого из них.
edit: LINQ to SQL не просто LINQ (спасибо @Jon Limjap)
Я задал себе очень похожий вопрос, кроме того, что вместо NHibernate я думал о WilsonORM, который я считаю довольно приятным.
Мне кажется, что существует много важных различий.
LINQ:
NHibernate:
Это действительно зависит. Если вы разрабатываете настольное приложение Rich (Windows), в котором вам нужно создавать объекты, работать с ними и, в конце концов, сохранять свои изменения, я бы рекомендовал структуру ORM, такую как NHibernate.
Если вы разрабатываете веб-приложение, которое обычно просто запрашивает данные и только изредка записывает некоторые данные обратно в БД, тогда я бы рекомендовал хороший язык запросов, например Linq.
Итак, как всегда, это зависит.: -)
Errr... there LINQ для NHibernate.
Возможно, вы имеете в виду, что использовать:
Я предпочитаю NHibernate.
LINQ to SQL довольно легкий, но он немного более тесно связан с вашей структурой данных, в отличие от NHibernate, который довольно гибкий с точки зрения типов определений объектов, которые могут быть сопоставлены с вашими структурами таблиц.
Конечно, чтобы не сказать, что LINQ to SQL не использует: этот сайт использует его. Я считаю, что очень полезно вставать и работать в небольших приложениях, где схема базы данных не такая массивная.
Начать с NHibernate - плохая идея. Он показывает хорошую производительность только с хорошими настройками. Попытайтесь использовать EFv4 для больших проектов и L2S (возможно, продукты третьей части) для малого и среднего размера. Эти продукты более удобны и гибки, чем NHibernate, и позволяют быстро начать работу.
не полный список
LinqToSql Pro:
Con:
NHibernate Pro:
Con:
Между двумя ORM
я бы выбрал LinqToSql, если:
Я бы выбрал Nhibernate, если:
ПРИМЕЧАНИЕ: это мое личное мнение. Я имею дело в основном с (сумасшедшими) устаревшими dbs и сложными задачами ETL, где объектная модель много помогает SQL.
Я не использую (или даже знаю) 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 не поддерживает отношения "многие ко многим" (но это может быть легко достигнуто с помощью нескольких строк кода).
Основным недостатком NHibernate является невозможность использовать вызовы методов. Они не могут быть переведены на SQL. Чтобы обойти это, вам нужно воссоздать деревья выражений, которые трудно сделать.