希望有人在使用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
相关的其他注意事项?
答案 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添加了一种新的查询方法。)