ORM / Консистенция уровня персистентности - PullRequest
26 голосов
/ 31 октября 2009

Я начинаю новый проект и ищу либо очень хороший ORM, либо постоянный уровень не на основе SQL.
Для этого проекта меня не волнует, как будут храниться данные, если их можно запрашивать и хранить с разумной скоростью, а главное - с помощью простых запросов.
Параллельность должна обрабатываться без проблем (интерфейс будет на другом уровне, и одновременно будет несколько пользователей, хотя необязательно работать с одними и теми же данными), и тем меньше мне придется сосредоточиться на слое данных (простые запросы, автоматические ленивые). загрузка и т.д.), тем лучше.
Я также хочу во что бы то ни стало избежать необходимости возиться со строковыми запросами, чтобы инструменты, поддерживающие LINQ или другие интуитивно понятные и, возможно, строго типизированные запросы, получали большой бонус.
Наконец-то, я действительно хочу работать с объектами POCO.
Вот список продуктов, которые я оценил, и почему они не подходят, просто чтобы я не видел совета по их использованию:

  • NHibernate: сумасшедшие вещи в формате xml, слишком много настроек, высокая сложность обслуживания и затраты на изменение модели, фабрики сессий грязны и не вписываются в мои потребности
  • Castle ActiveRecord: на основе NHibernate по-прежнему мало документации и некоторые проблемы, связанные с NHibernate. Кроме того, чтобы получить достойные модели, требуется так много атрибутов, что лучше создать схему вручную, а способ обработки отношений - позор.
  • Linq To SQL: отсутствуют объекты POCO и, согласно MS, со временем это не улучшится (EF - это то, к чему они стремятся)
  • Entity Framweork: хотя в v4 объекты POCO возможны, они все же довольно хакерские и вынуждают вас делать слишком много ручной работы, чтобы все настроить. Кроме того, v4 это просто бета
  • LLBLGen Pro: хорошо, особенно с адаптерами самообслуживания, но не с POCO. Кроме того, поставщик LINQ еще не совершенен. Наконец, удаление группы объектов невозможно через LINQ, что приводит к смешиванию API (один из которых далеко не интуитивен), и это мне не нравится.
  • XPO: все, кроме интуитивно понятных, очень медленных проблем параллелизма, а не POCO
  • SubSonic SimpleRepository: несколько минут я думал, что сплю. Беда подошла к концу, когда я понял, как эта штука не справляется с отношениями

Я также смотрел на MongoDB и CouchDB, но в этих случаях уловки со связанными объектами выглядели так, как будто они требовали слишком много тестирования, прежде чем все стало правильно. Кроме того, ни один из них не предлагает строго типизированные запросы.

Заранее спасибо за ваши предложения!

Ответы [ 11 ]

1 голос
/ 31 октября 2009

Взгляните на EntitySpaces . Я не могу рекомендовать из своего личного опыта, но он прекрасно работает для одного из моих коллег (который не в соф ...)

...