Некоторые предложения, на которых .NET ORM смотреть на обучение - PullRequest
7 голосов
/ 15 февраля 2009

Мне немного стыдно сказать, что я никогда не использовал ORM; как вы, наверное, помните, большая часть моей карьеры связана с Classic ASP, а маленький .NET, которым я занимаюсь, - это, как правило, только техническое обслуживание.

Для моей собственной карьеры, а также для подготовки нового проекта на работе (наконец, в .NET!) Я смотрю на добавление ORM в свой набор навыков - будучи мазохистом, я тоже собираюсь посмотреть в TDD, пока я работаю над этим проектом.

В любом случае, я использую .NET 3.5 для проекта (или планирую в любом случае), поэтому я пытаюсь решить, какой ORM я хочу выбрать; как я уже сказал, я не очень знаком с ними, но в целом я знаю, что они должны делать и как они это делают. Мой выбор в основном зависит от NHibernate или LINQ / Entity Framework. Я не использовал ни одного, но я видел некоторые демонстрации LINQ2SQL и NHibernate.

NHibernate в целом выглядит более надежным (Linq2Sql даже не является «истинным» ORM), а также широко используется в сообществе ALT.NET, которое я хочу изучить подробнее. Тем не менее, EF - это предложение Microsoft, и поэтому оно будет активно использоваться большинством команд разработчиков, которые просто используют то, что Microsoft предлагает, и не ищут никаких альтернатив.

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

РЕДАКТИРОВАТЬ: Я должен добавить, что, если это имеет значение при выборе ORM, приложение должно иметь дело с существующей базой данных.

РЕДАКТИРОВАТЬ (15.02.2009 18:48): Единственной базой данных, которую он будет использовать, является SQL Server 2005 Standard, работающий на Windows Server 2003. Учитывая, что это для рабочего проекта, моя цель состоит в том, чтобы выбрать что-то, что не займет у меня много времени, чтобы освоиться (так как мне нужно быть продуктивным, и «изучение нового инструмента» не будет хорошо для управления), но что-то это будет лучше, чем прокатить мой собственный DAL. В то время я еще не решил, будет ли приложение интеллектуальным клиентом или приложением ASP.NET, но одна его часть, скорее всего, будет выполнена с ASP.NET MVC.

Ответы [ 9 ]

13 голосов
/ 15 февраля 2009

Я бы порекомендовал nhibernate - поскольку он с открытым исходным кодом и имеет очень активную помощь сообщества, его легко получить. Отличной отправной точкой является FAQ по NHibernate , он варьируется от публикации для начинающих до очень продвинутых концепций. Начните работать, прочитав и выполнив Подготовьте свою систему для NHibernate и Ваше первое приложение на основе NHibernate .

Все работодатели, на которых я работал, использовали NHibernate для ORM в .NET и Hibernate для ORM в Java - поэтому вы должны извлечь большую пользу из изучения NHibernate.

4 голосов
/ 15 февраля 2009

SubSonic от Роба Коннери - это "швейцарский армейский нож" ORM, основанный на ActiveRecord. Вы можете быть продуктивным с ним за 30 минут. Имейте в виду, что он НЕ находится на уровне NHibernate с точки зрения параметров конфигурации и т. Д. Он чрезвычайно продуктивен, а код очень чист. Мы используем его в большинстве наших проектов.

2 голосов
/ 15 февраля 2009

Я второе упоминание Дэвида Роббинса о дозвуке. Единственный недостаток, который я укажу, заключается в том, что документация не идеальна. Работать с ним довольно просто, нужно просто знать, как это сделать.

Полагаю, стоит упомянуть еще одну вещь: какие базы данных вам нужно поддерживать? Если вам нужно работать с чем-то кроме SQL Server, я бы не стал использовать LINQ. Я могу ошибаться, но в прошлый раз, когда я проверял, нет никакой хорошей поддержки для баз данных, кроме SQL Server.

Последнее, что я хотел бы упомянуть, это то, что вам не нужно выбирать только один. Я использовал nHibernate, LINQ to SQL и Subsonic в одном проекте с приличным успехом (хотя я бы посоветовал избегать этого, если это вообще возможно). Мой совет - провести немного времени со всеми из них и узнать, что лучше в каждом из них.

Вот что я бы сказал о каждом из них:

  • LINQ to SQL - с ним очень легко начать работу. Но если вы хотите использовать что-то отличное от SQL Server, вы в значительной степени SOL.
  • NHibernate - Это, вероятно, самый мощный из всех ORM, и он поддерживает большинство СУРБД, но работать с ним может быть утомительно, поскольку не так много действительно хороших бесплатных генераторов кода для работы (can ') хотя говорить за несвободных).
  • SubSonic - хороший компромисс между NHibernate и LINQ to SQL. Он не поддерживает столько RDBMS, сколько NHibernate, но работает с большинством из тех, с которыми вы столкнулись в деловом мире.

TL; DR : NHibernate, если вам нужно иметь большой контроль над базой данных или вам нужно поддерживать что-то непонятное. SubSonic, если вам нужно работать с чем-то, кроме SQL Server. LINQ to SQL, если вы просто хотите работать с SQL Server.

2 голосов
/ 15 февраля 2009

Я бы сказал, иди с NHibernate. Он широко используется, имеет ряд учебных пособий и учебных ресурсов, а также группу активных участников. Это похоже на Hibernate, что означает, что любые навыки, которые вы изучаете в .NET NHibernate, переносимы на Java. Win-беспроигрышная-т. :)

2 голосов
/ 15 февраля 2009

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

Лично я бы начал с LINQ to SQL, потому что это очень просто. Поиграйте с ним, чтобы привыкнуть к мысли о том, как можно использовать ORM. Вы будете удивлены тем, насколько это просто и как легко начать, а затем вы, вероятно, столкнетесь со многими болевыми точками, которые приводят некоторых людей к Entity Framework.

Как только вы немного поработаете с Entity Framework, вы либо будете довольны им, либо удивитесь, каково это с nHibernate и некоторыми другими, упомянутыми в смежных вопросах.

Именно в этот момент, по моему мнению, вы будете наиболее склонны к успеху с чем-то вроде nHibernate, что может быть трудно выучить при первом набеге на ORM-землю.

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

2 голосов
/ 15 февраля 2009

Много дискуссий на эту тему по переполнению стека:

Какое решение для сопоставления объектов вы бы порекомендовали для .net?

Какова лучшая парадигма доступа к данным для масштабируемости?

Каркас персистентности?

И EF, и Nhibernate считаются полезными для больших проектов. Некоторые из основных опасений, выраженных в отношении EF, заключаются в отсутствии ленивой нагрузки / невежественности. Nhibernate имеет более крутой кривой обучения и требует больше ручной настройки.

1 голос
/ 21 июня 2010

Оформление заказа XmlDataMapper простая бесплатная ORM (лицензия LGPL), которая оставляет мало места в памяти по сравнению с другими гигантами.
Предоставленный пример проекта должен быть достаточно хорошим, чтобы начать работу.

Чтобы интегрировать XmlDataMapper, все что вам нужно сделать, это 4 маленьких шага

  1. Создание бизнес-объекта / DTO для таблиц
  2. Создайте файл XML с информацией о сопоставлении между таблицей и DTO.
  3. Укажите файл DTO и xml в конфигурации.
  4. Просто вызовите DTOConverter.Convert (dataReader) и другие подобные методы для преобразования вашей записи базы данных в DTO / Business Entity
1 голос
/ 15 февраля 2009

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

Если вы хотите оставаться в мире .NET от Micrsoft, LINQ - это отличная технология для изучения, а не только LINQ2SQL (который, как вы говорите, в любом случае не является полноценным ORM), поскольку LINQ можно применять к объектам, XML и в основном все, что IEnumerable / IQueryable.

В будущем я бы порекомендовал Entity Framework (опять же, в мире Microsoft). Было несколько страшно звучащих объявлений от команды LINQ2SQL в Microsoft, которые, похоже, предполагают, что все будущие усилия по разработке будут направлены на Entity Framework, а не на LINQ2SQL. В любом случае, эти технологии частично совпадают. Конечно, я не верю, что LINQ (вообще говоря) скоро уйдет, но я бы осторожно инвестировал в термин long в LINQ2SQL. Entity Framework все еще является относительно новой и находится в стадии активной разработки, поэтому ожидайте, что EF станет зрелым в ближайшие месяцы / годы.

Итак, прямо сейчас LINQ2SQL великолепен, и вы можете довольно быстро его запустить и запустить без необходимости углубляться в его внутреннюю работу (т. Е. Деревья выражений и т. Д.), Но в будущем я бы хотел Рекомендую Entity Framework / NHibernate, так как я считаю, что эти два ORM будут теми, которые будут использоваться большинством в течение следующих нескольких лет большинством разработчиков .NET.

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

1 голос
/ 15 февраля 2009

Поскольку вы используете .NET 3.5, я рекомендую LINQ.
LINQ требует только того, чтобы были реализованы интерфейсы IEnumerable и IQueryable.
Это означает, что он не ограничен реляционными данными.
Также см. Статью ORM в .NET 3.5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...