Что нужно знать при переходе с LINQ на SQL -> LINQ to Entities - PullRequest
3 голосов
/ 02 июня 2009

В последнее время я успешно использовал LINQ to SQL в ряде проектов, но я стремлюсь перейти на LINQ to Entities, поскольку это похоже на область, в которую Microsoft будет получать больше инвестиций по мере их перехода на .NET 4.0 и выше.

Прежде чем сделать это, я хочу выяснить, чего нет в LINQ to SQL, чего нет в LINQ to Entities. Мои первые расследования выявили несколько незначительных неприятностей.

  • LINQ to Entities не поддерживает Single() или SingleOrDefault()
  • LINQ to Entities не позволит вам проверить сгенерированный SQL в IDE VS2008 на предмет невыполненного запроса

Кто-нибудь знает о каких-либо других таких различиях?

Обратите внимание, что я не ищу параллельного сравнения основных функций LINQ to SQL и LINQ to Entities. Я надеюсь узнать о более тонких различиях, с которыми сталкиваются люди.

Ответы [ 2 ]

3 голосов
/ 02 июня 2009

С EF вы можете получить SQL, который будет сгенерирован, если вы приведете запрос к ObjectQuery, а затем проверите функцию ToTraceString. Конечно, это не так просто, как реализация LINQ to SQL. Кроме того, EF не имеет хорошей опции перехвата журналирования, такой как Context.Log в LINQ to SQL.

Я делаю ряд презентаций по LINQ to SQL -> EF миграция, начиная с VS Live на следующей неделе, и скоро начну серию блогов по ней на thinqlinq.com.

Jim

2 голосов
/ 02 июня 2009
  • Первый / Take / и т.д.; в EF требуется (IIRC) заказ; LINQ-to-SQL примет их для неупорядоченного запроса
  • Оценка подвыражения; если вы применили пользовательский Expression (например, предикат), используя Expression.Invoke, он не будет работать; EF не поддерживает использование подвыражений (LINQ-to-SQL поддерживает)
  • Сериализация; очень, очень разные
  • Ассоциация загрузки; требует явной загрузки в EF
  • Поддержка UDF (компонуется в базе данных)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...