Лучший ORM для использования с [закрытым] C# 4.0

33
задан Jalal 3 November 2012 в 18:08
поделиться

6 ответов

UPDATE 2016

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

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

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

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

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

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

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

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

Только не пытайтесь создать свою собственную ORM, их уже несколько десятков! Subsonic, Castle ActiveRecord, NH, EF (конечно), LLBLGenPro...

65
ответ дан 27 November 2019 в 17:37
поделиться

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

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

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

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

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

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

8
ответ дан 27 November 2019 в 17:37
поделиться

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

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

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

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

13
ответ дан 27 November 2019 в 17:37
поделиться

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

2
ответ дан 27 November 2019 в 17:37
поделиться

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

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

1
ответ дан 27 November 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: