Linq с несколькими типами СУБД - PullRequest
2 голосов
/ 01 февраля 2011

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

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

Ответы [ 4 ]

2 голосов
/ 01 февраля 2011

Частично зависит от запросов.С простыми запросами (выберите, где, orderby) у вас должно быть все в порядке, но есть много деталей, связанных с реализацией.

Например:

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

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

0 голосов
/ 18 февраля 2011

По сути, вы можете использовать Linq to Objects и работать с любым набором данных.

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

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

0 голосов
/ 01 февраля 2011

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

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

0 голосов
/ 01 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...