NHibernate, Entity Framework, активные записи или linq2sql
Моя команда запускает новый проект в ASP.NET MVC, и нам интересно, какую технологию использовать для доступа к данным. Как вы решаете, какой из них лучше? У кого лучшая производительность?
Какой из них легче использовать и поддерживать?
Ответы
Ответ 1
Если .NET 4.0, выберите между NHibernate или Entity Framework. NHibernate более расширяемый и, как правило, более функциональный. Entity Framework работает лучше для фирм, которые предпочли бы то, что предоставляет Microsoft. Они оба действительные варианты, и никто еще не опубликовал объективный значительный удар по удару. Это одно из лучших не объективных сравнений:
http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx
Если .NET 3.5 или более ранняя версия, выберите NHibernate.
Выбор базы данных и ORM для .NET-проекта
Какой инструмент ORM я должен использовать для разработки .Net
Проще всего изучить и использовать платформу .NET ORM?
Некоторые предложения, по которым .NET ORM смотрит на обучение
Лучший инструмент ORM
https://stackoverflow.com/questions/380620/what-object-mapper-solution-would-you-recommend-for-net
https://stackoverflow.com/questions/249550/what-orm-frameworks-for-net-do-you-like-best
Лучшие бесплатные инструменты ORM для использования с .NET 2.0/3.5
https://stackoverflow.com/questions/132676/which-orm-for-net-would-you-recommend
После 4 сентября 2009 года:
ИЛИ Инструмент сопоставления
Выбор O/RM (не зависит от linq)
https://stackoverflow.com/questions/1469761/nhibernate-vs-entity-framework-vs-something-better
Как выбрать реляционное сопоставление объектов для .net
Тем не менее, все меняется. Теперь, когда NHibernate поддерживает Linq, я думаю, что NHibernate является явным выбором в большинстве ситуаций. Для более длительного и довольно современного анализа не стесняйтесь читать следующее:
.NET и ORM - Решения, решения
Ответ 2
Мое предпочтение - LLBLGenPro - действительно отличный ORM, который работает так, как вы ожидали. Он не основан на конфигурации, такой как инфраструктура сущности или nhibernate, и генерирует ваш DAL на основе вашего db (с большой гибкостью благодаря своим инструментам).
http://www.llblgen.com/defaultgeneric.aspx
Ответ 3
LINQ2SQL проще всего использовать. Entity Framework обеспечивает большую расширяемость, и в будущей версии будет много улучшений.
Одно ключевое правило для производительности: писать код, который легко поддерживать, читать и распространять; если он медленный - оптимизируйте!
Я думаю, что разница в производительности между ORM сегодня очень примечательна, поэтому вы должны выбрать тот, который чувствует себя максимально комфортно и эффективно работать.
Ответ 4
Entity Framework лучше отображает отношения, чем linq2sql (например, имеет несколько множественных отношений).
Я не использовал два других, но я использовал Hibernate в Java, и это было довольно просто использовать.
Ответ 5
Это сообщение в блоге сравнивает различные технологии данных для .NET в разных аспектах (производительность, ремонтопригодность, тестируемость и т.д.). Возможно, вам помогут в принятии решений.
Ответ 6
Мой выбор - Devart LinqConnect (http://www.devart.com/linqconnect/). Этот продукт прост в использовании как LINQ to SQL (и даже совместим с ним), и в то же время предоставляет расширенные функции ORM, такие как Entity Framework. Я предпочитаю их Visual Designer и их функции ORM:
- Сложные типы
- Lazy Loading
- PLINQ
Ответ 7
Я сталкиваюсь с той же дилеммой.
LINQ2SQL даст вам больше гибкости и немедленного контроля доступа к данным,
однако Entity Framework - это "корпоративное" решение.
В настоящее время я пытаюсь это сделать - SubSonic и выглядит очень многообещающим.
Ответ 8
Чтобы сравнить ORM - посмотрите http://ormbattle.net/
Ответ 9
Я использую Entity Framework (сначала код) и nHibernate в течение некоторого времени, и я предпочитаю nHibernate, особенно свободно. Кажется, это дает мне гораздо большую гибкость в том, как я сопоставляю свои объекты с базой данных. Кроме того, он дает гораздо больший контроль над ленивыми нагрузками и каскадами действий над объектами.