OrganizationServiceContext.CreateQuery vs Fetch

时间:2016-01-07 23:21:22

标签: c# linq dynamics-crm

希望有人在使用OrganizationServiceContext.CreateQuery与使用FetchXML(或QueryExpression)时从性能角度阐明一些亮点。

我已广泛使用LINQ,但我是CRM新手。 CreateQuery似乎非常适合我的技能,但我最终还是对表现感到好奇。

我意识到这一点

var result = from e in orgContext.CreateQuery("xyz_myentity")
             where e["email"] == "someone@example.com"
             select e;

将返回xyz_myentity的所有属性,但我似乎无法找到位于CRM之上的LINQ提供程序的任何文档。是否使用从SQL / CRM返回的匿名类型限制属性?或者魔术正在完成"客户"从服务器返回完整的数据集后?是所有属性的SQL查询,然后LINQ提供程序是否构建匿名类型?

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

是否有与引入OrganizationServiceContext相关的其他注意事项?

1 个答案:

答案 0 :(得分:3)

LINQ for CRM建立在QueryExpression之上,因此具有几乎相同的限制。它在Microsoft.Xrm.Sdk库中的客户端实现。该库向CRM Web服务发送QueryExpression个请求。

LINQ在查询堆栈中添加了一个抽象层(LINQ - > QueryExpression - > SQL),因此您可以获得较小的性能损失。

FetchXML 是可用于查询CRM的最古老的技术。微软声称它在服务器上的性能稍差。编写FetchXml查询归结为构造XML消息,因此通常编程体验很差。

处理LINQ查询需要OrganizationServiceContext;它是一个能够跟踪数据对象更改的对象。众所周知,它存在一些问题,而且还需要付出代价。例如。不建议跟踪大量数据。

当我必须在LINQ和QueryExpression之间做出选择时,我仍然赞成后者。当您需要查询CRM时,它是最轻量级的技术,并且借助一些扩展方法,编程体验也可以。

(注意:CRM 2016使用Web API添加了一种新的查询方法。)