2016-01-07 2 views
4

Надеясь, что кто-то может пролить некоторый свет с точки зрения производительности при использовании OrganizationServiceContext.CreateQuery против FetchXML (или QueryExpression).OrganizationServiceContext.CreateQuery vs Fetch

Я широко использовал LINQ, но новичок в CRM. CreateQuery кажется подходящим для моего набора навыков, но я думаю о производительности в конце.

Я понимаю, что прямо

var result = from e in orgContext.CreateQuery("xyz_myentity") 
      where e["email"] == "[email protected]" 
      select e; 

возвращает все атрибуты для xyz_myentity, но я не могу найти какую-либо документацию для поставщика LINQ, который сидит на вершине CRM. Будет ли использовать атрибуты ограничения анонимного типа, возвращаемые из SQL/CRM? Или магия делается «клиентской» стороной после того, как полный набор данных возвращается с сервера? Является ли SQL-запрос для всех атрибутов, а затем поставщиком LINQ, создающим анонимный тип поверх этого?

var result = from e in orgContext.CreateQuery("xyz_myentity") 
      where e["email"] == "[email protected]" 
      select new { Name=e["xyz_name"] }; 

Существуют ли какие-либо другие соображения, связанные с введением OrganizationServiceContext?

ответ

3

LINQ для CRM построен поверх QueryExpression и поэтому имеет почти такие же ограничения. Он реализован на стороне клиента в библиотеке Microsoft.Xrm.Sdk. Библиотека отправляет QueryExpression запросы на веб-службу CRM.

LINQ добавляет уровень абстракции в стек запросов (LINQ -> QueryExpression -> SQL), поэтому вы можете ожидать небольшой удар производительности.

FetchXML является самой старой техникой, доступной для запроса CRM. Microsoft заявляет, что она немного менее эффективна на сервере. Написание запросов FetchXml сводится к построению XML-сообщений, поэтому, как правило, плохой опыт программирования.

OrganizationServiceContext необходим для обработки запросов LINQ; это объект, способный отслеживать изменения объектов данных. Известно, что у него есть некоторые проблемы, и, опять же, это связано со стоимостью. Например. отслеживание больших объемов данных нецелесообразно.

Когда мне нужно выбирать между LINQ и QueryExpression, я по-прежнему пользуюсь последним. Это самая легкая технология, когда вам нужно запросить CRM и с помощью нескольких методов расширения опыт программирования в порядке.

(Примечание: CRM 2016 добавляет новый метод запросов с использованием Web API.)

+0

Спасибо за информацию. Любые дополнительные ссылки, на которые вы можете указать мне? – andleer

+0

Вот хорошее сравнение между вариантами запроса: https://blogs.msdn.microsoft.com/crminthefield/2013/01/14/dynamics-crm-2011-sdk-query-limitations-by-api/ –

+0

Другая статья о конверсии запросов LINQ к QueryExpressions можно найти здесь: https://code.msdn.microsoft.com/Convert-CRM2011-Linq-into-93a163ee. –

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