2011-02-01 4 views
2

Я слышал, что однократная запись запроса Linq может быть запущена также в базе данных SQL и MS Access. Правильно или неправильно?Linq с несколькими RDBMS типа

Например, я хочу писать запросы один раз независимо от типа базы данных, например, в настоящее время я использую базу данных MS Access, а затем, если я хочу перейти на SQL Server, то я не хочу менять свои запросы. Это возможно??

+0

Я использую ту же сборку как на SQL Server, так и на SQL CE без проблем. Тем не менее, мне пришлось немного сгенерировать сгенерированный код и ограничить то, что у меня есть в SQL CE (например, без представлений, без хранимых процедур, без функций и т. Д.). – leppie

ответ

2

Отчасти это зависит от запросов. Для простых запросов (выберите, где, orderby), все должно быть хорошо, но есть много специфических для реализации деталей.

Например:

  • принимая First на съемочной площадке вы не в явной форме заказанной: LINQ к SQL прекрасно с этим, LINQ к Entities не получится
  • с помощью Expression.Invoke к создайте gnarly custom expression: снова LINQ-to-SQL в порядке, LINQ-to-Entities не удастся
  • с использованием таких вещей, как UDF - в дополнение к LINQ-to-Entities, не поддерживающим его, ваша RDBMS может не поддерживать его
  • с «Astoria» (LINQ to data services), были некоторые сценарии вокруг .Where(predicate).FirstOrDefault() против .FirstOrDefault(predicate) - которые семантически идентичны, но IIRC только один работает (Астория)

Моя точка является; это может работать, но вам нужно протестировать конкретную реализацию.

0

LINQ-to-SQL будет работать только с SQL-сервером. Linq для объектов будет работать на большинстве любых коллекций, но вы потеряете отложенное выполнение.

0

Если вы используете Entity Framework, вы можете найти/купить несколько поставщиков для разных источников данных.

Как только у вас будет достаточно абстракции над контекстом сущности, вы можете использовать любую конструкцию LINQ для построения ваших запросов. Но имейте в виду, что не все провайдеры поддерживают одни и те же операторы и функции. Вам все равно придется протестировать полное приложение во время смены СУБД.

0

В принципе, вы можете использовать Linq для объектов и работать с любым набором данных.

Если вы хотите сохранить свою логику и специфику - я рекомендую использовать Devart LinqConnect.

Кроме того, вы можете узнать больше об одновременном использовании Oracle и MS SQL в given article. Подходы будут одинаковыми для LinqConnect.

Смежные вопросы