Какой ORM следует использовать вместо Linq для Sql?

Я работаю над CMS в качестве своего хобби. Поскольку мне не платят за это, время не очень важно, и я стремлюсь сделать хорошо продуманную систему.

У меня есть набор бизнес-классов, которые отвечают за основную логику, и они получают данные из базы данных через интерфейсы, а поставщик данных (который может реализовать интерфейс) можно установить из конфигурации.

В настоящее время я использую LINQ to SQL в качестве уровня доступа к данным, но чем больше я читаю об этом вопросе, тем больше убеждаюсь, что я должен использовать более продвинутый ORM, потому что LINQ to SQL не поддерживает некоторые вещи, которые будет очень хорош для общей производительности приложения. Например, кеширование и настойчивость. (Я читал, что NHibernate, например, только при необходимости консультируется с базой данных, в противном случае он просто получает данные из своего кеша. - Это хорошо, потому что в среднем веб-сайт не получает новый контент в течение нескольких дней, поэтому вместо теряя производительность при чтении из базы данных по каждому запросу, было бы прекрасно обслуживать те из кеша.)

Я думаю о некоторых вариантах и ​​хотел бы знать, что мне делать с этим.

  • Напишите мою собственную логику персистентности для моих бизнес-классов и продолжайте использовать LINQ to SQL.
  • Используйте NHibernate напрямую или через Castle ActiveRecord или Fluent NHibernate
  • Используйте другие ORM

Мой любимый выбор был бы вторым, потому что NHibernate более надежный, чем мне нужно, и ActiveRecord, похоже, скрывает большую часть сложности. (И, кстати, я также намерен использовать Castle Windsor.)

Единственная проблема заключается в том, что я не мог найти никакой информации об эффективности этих инструментов. Я потратил несколько часов на поиски в Google (и я искал этот сайт, а также)), нашел немало статей и сообщений в блогах, но никто из них ничего не сказал о производительности.

Будет ли это лучше, чем текущее решение, или я должен использовать что-то совсем другое для задачи?

Спасибо заранее!

9 ответов

Linq to SQL хорош (если вы не используете ничего, кроме SQL Server). Не беспокойтесь о Linq to Entities (EF). Он сломан (далеко не созрел) - на очень многих уровнях.

Я бы пошел на NHibernate сам - отличное сопоставление объектов и поддержка нескольких платформ DB. И очень проверенный ORM.


Я бы порекомендовал Entity Framework v4.0. В отличие от первого неудачного провала попытки ORM с EF v1.0, версия, выходящая с .NET 4.0, действительно потрясающая. Microsoft улучшила EF на всех уровнях и напрямую отреагировала на вклад многих крупных сторонников сообщества ORM. У меня был прямой ввод по электронной почте с Microsoft по нескольким вопросам с EF, включая эффективность и достоверность сгенерированной истории SQL, n-Tier и визуального дизайнера.

Новый EF представляет собой сплошную ORM, которая обеспечивает полную историю OOB для всего, от богатого визуального дизайнера, с помощью настраиваемого генерации кода, эффективной генерации SQL, многоуровневых переносных типов, реализации стиля POCO, очень насыщенных сопоставлений между вашим кодом, концептуальной модель и схема базы данных и т.д. Я был большим сторонником nHibernate и сильным противником EF, но мое мнение изменилось с тех пор, как я начал использовать VS2010/.NET 4.0 Beta 2. Я настоятельно рекомендую использовать EF v4.0, если вы работаете на платформе .NET.


Я бы сказал, что NHibernate + FluentNhibernate заставит вас работать и работать очень быстро. Лучшее в FluentNhibernate - это то, что вы можете настроить его всего на несколько строк, и он автоматически отобразит ваши объекты в вашей базе данных для вас.

Если вам нужно что-то, что немного легче в конфигурации, вы можете проверить Subsonic


так как это проект предназначен для использования в целях обучения, Nhibernate действительно стоит усилий для изучения:)


Хорошо, мой голос был бы, прежде чем спуститься по маршруту ORM, проверьте также полноценные OODBMS.

db4Objects от Versant определенно стоит взгляда, его быстро, его смехотворно проста в использовании и довольно зрелая.

Изменить: Примечание. db4Objects также поддерживает Linq.


Вы видели S # arpArchitecture? Это структура, основанная на NHibernate и ASP.NET MVC, на которых вы можете создавать свое приложение.

Хорошо, если вы намерены строить все с нуля (возможно, чтобы узнать об архитектуре), вы можете взглянуть на исходный код S arpArchitecture, чтобы получить вдохновение.


Я согласен с вами в выборе второго варианта. Не потому, что я знаю, что производительность в этом случае лучше, а потому, что вы сказали, что хотите иметь хорошо продуманную архитектуру систему. Если вы используете LINQ to SQL, проблема, с которой вы столкнулись, заключается в том, что классы, которые вы будете генерировать с помощью перетаскивания LINQ, будут сильно зависеть от схемы вашей базы данных и вашей структуры таблицы. Каждый раз, когда вы вносите изменения в структуру вашей таблицы, вам придется регенерировать классы LINQ. Это нежелательно с точки зрения хорошей архитектуры. Вы должны использовать NHibernate с asp.net mvc. NHibernates предоставляют вам возможность сопоставлять свойства вашего бизнес-объекта с полями таблицы базы данных через XML файл. Это добавляет дополнительный уровень абстракции, где в ваших бизнес-объектах напрямую не зависит ваша структура таблицы. В Codeplex есть хороший проект, который использует NHibernates. Вот URL для этого проекта http://jscportal.codeplex.com/. Это очень чистый портал CMS, построенный с использованием asp.net mvc и NHibernates. Также этот проект даст вам представление о создании хорошего дизайна для вашего приложения. Все самое лучшее!


Этот вопрос задавали и отвечали много раз:

NHibernate, Entity Framework, активные записи или linq2sql


LLBLGen Pro - это просто лучший

licensed under cc by-sa 3.0 with attribution.