Отказ от ответственности: Я работаю в Mindscape, который создает LightSpeed ORM для .NET
Поскольку вы спрашиваете не о конкретной проблеме, а о подходах к решению проблемы гибкости с помощью ORM, я решил присоединиться к некоторым взглядам с точки зрения поставщика. Это может или не может быть полезным для вас, но может дать пищу для размышлений: -)
При разработке O / R Mapper важно учитывать то, что мы называем «аварийными люками». ORM неизбежно приведет к определенному набору поведения по умолчанию, что является одним из способов повышения производительности труда разработчика.
Один из уроков, которые мы извлекли из LightSpeed, был о том, где разработчикам нужны эти аварийные люки. Например, KeithS здесь заявляет, что ORM не годятся для массовых операций - и в большинстве случаев это так. У нас был этот сценарий с некоторыми клиентами, и мы добавили перегрузку к нашей операции Remove (), которая позволила вам передать запрос, который удаляет все соответствующие записи. Это избавило от необходимости загружать объекты в память и удалять их. Прислушиваться к тому, что разработчикам не терпится и помогает быстро решить эти проблемы, очень важно помогать в создании надежных решений.
Все ORM должны эффективно выполнять пакетные запросы. Сказав это, мы были удивлены, увидев, что многие ОРМ этого не делают. Это странно, учитывая, что часто пакетирование может быть сделано довольно легко, и несколько запросов могут быть объединены и отправлены в базу данных одновременно, чтобы сохранить циклические поездки. Это то, что мы сделали с первого дня для любой базы данных, которая его поддерживает. Это просто отступление от точки дозирования, сделанного в этой теме. Качество этих пакетных запросов является реальной проблемой, и, честно говоря, некоторые ORM-операторы генерируются некоторыми ORM.
В целом вы должны выбрать ORM, который дает вам немедленный прирост производительности (почти в стиле демонстрационной программы «смотрите, я запрашивал данные за 30 секунд!»), Но также обратил внимание на более масштабные решения, где есть аварийные люки и некоторые из менее демо, но нужны чрезвычайно полезные функции.
Я надеюсь, что этот пост не слишком продавался, но я хотел обратить внимание на то, что при выборе продукта учитывается мыслительный процесс, который стоит за любым продуктом. Если философия соответствует тому, как вам нужно работать, то вы, вероятно, будете счастливее, чем выбрать тот, который вам не подходит.
Если вам интересно, вы можете узнать о нашей LightSpeed ORM для .NET .