Я - давний пользователь библиотеки DevExpress XPO. У него много отличных функций, но есть несколько недостатков:Советы по миграции из XPO в LINQ to SQL
- При сохранении существующего объекта все свойства отправляются в запросе на обновление; изменения отслеживаются по каждому объекту, а не по свойствам.
- Оптимистическая блокировка выполняется для каждого объекта, а не для столбца.
- При возникновении оптимистического исключения блокировки не предоставляется контекст, описывающий характер конфликта; ваш единственный реальный ответ - не выполнить операцию или воспроизвести ее и повторить попытку в цикле.
- Поддержка LINQ для XPQuery очень слабая (по крайней мере, в версии 8.1, которую мы используем). Таким образом, вы часто вынуждены использовать XPView, который не является безопасным для типов, или XPCollection, который может возвращать столбцы, которые вам не нужны.
После прочтения о том, как LINQ to SQL реализует оптимистичную блокировку и обработку конфликтов обновления, я был продан! Мне нравится, как он реализует оптимистичную блокировку на уровне столбцов и не требует добавления столбца в таблицу. Умение проверять и обрабатывать точный характер конфликтов велико. И тот факт, что они отслеживают изменения в столбцах, должен значительно повысить эффективность запросов к обновлению.
Конечно, я еще не использовал LINQ to SQL в реальных приложениях, поэтому я не знаю, что это сравнение в действительности. Кроме того, я неясно, если он имеет аналоги для некоторых функций, которыми мы наслаждаемся с XPO, такие как:
- Автоматическое обновление схемы (мы считаем, что в предметном дизайне вождения структуры базы данных, а не наоборот, и это значительно упрощает развертывание программного обеспечения)
- Два варианта реализации наследования (отношения между таблицами или один-к-одному)
- Поддержка хранилища в памяти (хотя я полагаю, что мы могли бы заменить LINQ на объекты нашего подразделения тесты)
- Настройка поставщика хранилища (что позволило нам добавить поддержку NOLOCK для наших запросов XPO)
Мы собираемся провести частичную миграцию, где мы будем временно использовать два ORM для разных частей нашего кода. У кого-нибудь из вас был реальный опыт работы с XPO и LINQ to SQL? Как они сравниваются на практике? В частности, знаете ли вы о каких-либо функциях, которые отсутствуют в LINQ to SQL, что может вызвать проблемы с миграцией кода?
О, и должен ли я даже заботиться о LINQ для сущностей? Это выглядит намного сложнее, чем все, что нам нужно.
Просто любопытно, посмотрели ли вы на DB4Objects? Я понятия не имею о схемах блокировки в db4o, но вам интересно узнать, оценили ли вы его. (его не ORM, хотя его истинная OODBMS) –
Нет, я не смотрел DB4Objects. Поскольку мы полагаемся на SSAS, для нас не существует возможности изменить наш механизм базы данных. – Jacob
Хотелось бы узнать, как вы нашли LinqToSql vs XPO. Или вы пошли другим путем? - Alex – Aryeh