Вопрос

Привет, я, кажется, нахожусь на перекрестке инструментов ORM и хотел бы получить несколько советов от людей, которые столкнулись с подобной проблемой.В прошлом я использовал CodeSmith с шаблонами NetTiers для генерации моего DAL, все было довольно хорошо, однако я решил отказаться от этого по той или иной причине.

Итак, я нахожусь на распутье и обнаружил следующее:-

  1. Я посмотрел на PLINQO (Linq to SQL), который, кажется, отлично справляется, однако, поскольку Microsoft не уверена в Linq to SQL, это может быть не лучшим выбором.
  2. Linq to Entities - Это все еще в зачаточном состоянии, и я могу ошибаться, но люди жалуются на раздувание и то, как хранимые процедуры
  3. Я посмотрел на NHibernate, это, возможно, лучший выбор, но, похоже, это крутая кривая обучения
  4. То же самое для LLBLGen
  5. Дозвуковой - Не уверен насчет этого?
  6. Придерживайтесь проверенных NetTiers, забудьте о наворотах, забудьте, что вы вынуждены использовать корпоративную библиотеку, забудьте о динамическом sql, который она создает, забудьте, что их активность на форумах практически отсутствует, забудьте об этом и используйте это!

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

Возможно, есть и другие, которых я упустил.Я ищу ответы, которые объясняют, почему стоит обратить внимание на инструмент ORM.

Спасибо , Ричард

Это было полезно?

Решение

Я сам использовал .NetTiers в последнем проекте.но над тем, над которым я работаю в данный момент, мы пробуем объекты Linq 2.Вы правы насчет того, что Linq2EF не является зрелым.Мы постоянно жалуемся на это, вот почему мы используем шаблоны T4, которые генерируют код из файла EDMX.Мы также изменили эти шаблоны, чтобы у нас были бизнес-объекты, интерфейсы для внедрения и DAL + DAO.Мы счастливы тому, как это работает сейчас.Хорошая вещь в том, что мы можем использовать LINQ против сущностей.

В противном случае я бы также предложил Свободно владеет NHibernate (Ссылка) к тебе.Это была одна из вещей, которые мы также рассматривали.Но вам придется написать много вещей самостоятельно.Это не похоже на то, к чему вы привыкли в .NetTiers, где весь код генерируется за вас.

С тех пор как Дозвуковой 3 (Ссылка) всего около недели от роду, я предлагаю вам проверить это.Судя по тому, что я видел, это выглядит очень многообещающе.И он использует T4, так что вы можете нарезать его кубиками в соответствии с вашими потребностями.

Другие советы

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

Ты мог бы попробовать DataObjects.NET .Этот ORM использует подход "сначала код", поддерживает обновление схемы БД и LINQ.Ознакомьтесь с этим кратким описанием http://www.x-tensive.com/Products/DO/.

Я думаю, что двумя наиболее авторитетными и сильными инструментами ORM прямо сейчас являются NHibernate ( гИбернация ) и LLBLGen Pro.

NHibernate = Очень ориентирован на предметную область.

LLBLGen Pro = Ориентированный на данные.

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

Как я уже сказал, в конце концов, в целом они оба превосходны, и у обоих есть свои небольшие преимущества / недостатки.

О причинах использования ORM вот ссылка на запись в блоге Гленна Блока что говорит само за себя на самом деле.Что касается моего опыта, чуть больше года назад я хотел использовать ORM и выбрал NHibernate.

Настойчивость для меня - решаемая проблема, помимо некоторой формы сопоставления моей модели предметной области с моими реляционными данными, это то, о чем мне больше не нужно беспокоиться.Я посмотрел на Linq To SQL, но это просто не давало мне достаточного контроля над тем, как данные сопоставляются с моими объектами, а Entity Framework была недостаточно зрелой на мой вкус.В другом крупном проекте, над которым работала часть моей команды, использовались NetTiers и CodeSmith, и, как вы говорите, раздувание, генерация кода (и само его количество) заставили меня почувствовать себя немного неуверенно.В конце концов, я выбрал NHibernate, потому что для меня это одна из самых зрелых ORM, и она предоставляет функции, которые не только поддерживают мелкозернистую объектную модель, но и имеют встроенные средства обработки запросов и, по сути, решают другие проблемы с производительностью, такие как кэширование.

Да, я признаю, что кривая обучения довольно крутая, но если вы потратите время, выгоды, которые вы получите от этого, огромны.Блоги о Айенде Рахиен и Фабио Мауло являются кладезем информации о NHibernate.Существует некоторая поддержка LINQ для NHibernate с помощью этого Поставщик LINQ но Стив Стронг в настоящее время собирает функции, которые обеспечат полную поддержку LINQ в NHibernate.Так что все это можно использовать для NHibernate, но, в конце концов, это зависит от того, что вам больше всего нравится.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top