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

Лучший ORM для использования с С# 4.0

Каков наилучший способ использовать ORM, например, Nhibertate или Entity Framework или сделать ORM клиента. Я буду использовать этот ORM для проекта С# 4.0

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ 2016

Шесть лет спустя вещи ОЧЕНЬ разные. NHibernate полностью заброшен, другие альтернативы были оставлены (например, Subsonic), Entity Framework - это, пожалуй, самый распространенный полнофункциональный ORM, и люди перешли к микро ORM, например Dapper в течение многих лет, чтобы отображать от запросов к объектам с минимальными накладными расходами.

Сценарии приложений также изменились. Вместо того, чтобы загружать и кэшировать один большой граф объектов за счет памяти и производительности, веб-сервисы и API REST должны обслуживать большое количество небольших запросов. Это означает, что полная нагрузка ORM больше не является приемлемой.

Это означает, что шаблоны и методы, такие как Active Record, транзакция за запрос и т.д., стали пропускной способностью и масштабируемостью, убивая анти-шаблоны

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

Оригинальный ответ

Определите "лучший": он самый зрелый, тот, у которого больше документации, больше сообщества, больше мейнстрима?

NHibernate более зрелый, многофункциональный, с более продвинутым сообществом и вряд ли будет прекращен, когда MS решит снова разорвать совместимость, Entity Framework является более распространенным и поддерживается в готовом виде. Вы найдете больше книг для начинающих для EF, более продвинутых книг для NH.

Хорошим вариантом было бы попробовать один из более простых ORM, например Subsonic, и перейти к более продвинутым ORM, как только вы поймете, как работают ORM, каковы различные ловушки, что означает SELECT N+1 [: р]

Просто не пытайтесь создать свой собственный ORM, там уже несколько десятков! Subsonic, Замок ActiveRecord, NH, EF (конечно), LLBLGenPro...

Ответ 2

Если вы можете потратить немного денег, обязательно посмотрите LLBLGEn Pro 3.0

  • полная поддержка .NET 4.0 и зрелый продукт. Хорошая поддержка также полезна.
  • поддержка широкой базы данных (Oracle, MS Sql, Firebird, MySql, PostgreSQL, Sysbase)
  • хороший дизайнер, первая поддержка модели, а также первая поддержка базы данных.

Если ваш бюджет тонкий, попробуйте NHibernate. Это также зрелый продукт, но он имеет большую кривую обучения. И если вам нужна поддержка, вы всегда можете позвонить Айенде: -)

Для небольших проектов EF 4.0 - хороший выбор.

Ответ 3

Большинство ORM имеют свои сильные и слабые стороны.

Сущность Framework, например, имеет (огромное?) преимущество быть в самой структуре, но она также довольно тяжелая, и немного сложнее встать и работать (крутая кривая обучения).

Есть несколько очень хороших, очень простых в использовании коммерческих ORM. В настоящее время я использую Lightspeed в проекте С# 4 и очень доволен этим для этого конкретного сценария.

Это действительно сводится к тому, что вам нужно от ORM. Если вы хотите очень быстро и легко настроить и использовать, Lightspeed, дозвуковой и другие очень приятны. Если вам нужно полнофункциональное, то Entity Framework и NHibernate - хорошие варианты.

Ответ 4

Вызов ORM лучшим среди всех в общей перспективе совершенно невозможно. Каждый из них является лучшим с разных точек зрения. Вы выбрали тот, который наилучшим образом соответствует вашим потребностям. Linq2Sql был написан с учетом производительности, но ему не хватает поддержки для других провайдеров, Linq2Sql работает очень быстро. Однако есть и другие, которые могут быть не такими быстрыми, как Linq2Sql, когда дело доходит до работы с SQL-сервером, но они поддерживают широкий спектр поставщиков. Лучшей идеей было бы перечислить функции, которые вы хотите ORM для вашего проекта, и выбрать тот, который обслуживает все ваши потребности ". Вы можете задать эти вопросы, чтобы выбрать правильный ORM для своего проекта.

  • Какие поставщики баз данных вы хотите, чтобы ORM поддерживала? SQL Server, MySQL, Oracle и т.д.
  • Вам нужна поддержка model-first или db-first?
  • Каковы мои критерии производительности [память, обработка]?
  • Вы собираетесь использовать его в веб-приложении или на рабочем столе-приложении?
  • У вас есть распределенные клиенты в вашем приложении?
  • И список можно продолжить.

Ответ 5

Я использую Linq-to-SQL в качестве основного ORM при создании приложений С#. Я, в конечном счете, перейду к Entity Framework, но на данный момент это действительно легко использовать и быстро.

Ответ 6

Я бы согласился с @this. __curious_geek, что выбор правильной ORM будет зависеть от ваших требований. Работая как с Hibernate, так и с Entity Framework, я чувствую, что последний более удобен для пользователя, поскольку он является графическим редактором. Что касается функциональности, то NHibernate имеет преимущество в поддержке множества поставщиков баз данных. Также настройка NHibernate оказалась намного проще, чем настройка инфраструктуры Entity Framework.

Предполагая, что большинство инструментов удовлетворяют вашим основным требованиям, я бы предпочел, чтобы NHibernate как яркое и привлекательное сообщество пользователей было большим плюсом для любого инструмента.