OrganizationServiceContext.CreateQuery vs Fetch
本文关键字:Fetch vs CreateQuery OrganizationServiceContext | 更新日期: 2023-09-27 18:29:29
希望有人能从性能的角度阐明使用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
的引入是否有其他考虑因素?
LINQ for CRM是在QueryExpression
之上构建的,因此具有几乎相同的限制。它在Microsoft.Xrm.Sdk库的客户端实现。库向CRM web服务发送QueryExpression
请求。
LINQ在查询堆栈中添加了一个抽象层(LINQ->QueryExpression->SQL),因此您可以预期性能会受到较小的影响。
FetchXML是可用于查询CRM的最古老的技术。微软表示,它在服务器上的性能稍差。编写FetchXml查询归结为构造XML消息,因此通常编程经验较差。
OrganizationServiceContext
是处理LINQ查询所必需的;它是一个能够跟踪数据对象变化的对象。众所周知,它有一些问题,而且,它也有成本。例如,跟踪大量数据是不可取的。
当我不得不在LINQ和QueryExpression
之间做出选择时,我仍然倾向于后者。当你需要查询CRM时,这是最轻量级的技术,在一些扩展方法的帮助下,编程体验是可以的。
(注:CRM 2016添加了一种使用Web API的新查询方法。)