当前位置: 首页 > 编程语言 > C#

为什么我的CRM插件中的所有引用属性都是空的?

时间:2023-04-10 13:46:19 C#

为什么我的CRM插件中的所有引用属性都为空?我正在使用早期绑定在联系人实体上编写一个PostUpdate插件。不幸的是,所有应该表示1:x关系的属性都是空的。代码很简单:*CRMcontext是CrmSvcUtil.exe生成的文件,*service是LocalPluginContext的IOrganizationService:using(varserviceContext=newCRMcontext(service)){//这很好用首先(c=>c.Id==context.PrimaryEntityId);//为什么货币在这一行之后为空?!(是的,它在实体中设置)varcurrency=contact.transactioncurrency_contact;我按照这个例子(最后一个代码片段):http://msdn.microsoft.com/en-us/library/gg695791.aspx感谢您的帮助!编辑://////N:1transactioncurrency_contact///[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("transactioncurrencyid")][Microsoft.Xrm.Sdk.RelationshipSchemaNameAttribute("transactioncurrency_contact")]publicTransactionCurrencytransactioncurrency_contact{nget{returnthis.GetRelatedEntity("transactioncurrency_contact",null);}set{this.OnPropertyChanging("transactioncurrency_contact");this.SetRelatedEntity("transactioncurrency_contact",null,value);这个.OnPropertyChanged("transactioncurrency_contact");}}CRM不会自动加载相关的实体属性您需要在每个延迟加载的属性上调用LoadProperty。LameCoder是不正确的,LINQtoCRM不生成FetchXml,而是生成QueryExpressions,这就是为什么它仅限于QueryExpressions具有的任何功能。编辑1-为什么这不像MSDN文章中的最后一个例子那样隐式工作?获取相关实体方法定义如下:关系键=newRelationship(relationshipSchemaName){PrimaryEntityRole=primaryEntityRole};如果(!this.RelatedEntities.Contains(key))返回(IEnumerable)null;否则返回Enumerable.Cast((IEnumerable)this.RelatedEntities[key].Entities);如果您的早期绑定实体继承了SinceEntity,那么它所做的就是访问它自己的内部RelatedEntities集合。访问服务器以加载相关属性无效。如果您使用CodeGeneration.CodeCustomization生成早期绑定实体,它应该按照您列出的方式工作,因为它将继承CrmEntity,这将为您加载关系,因为它覆盖GetRelatedEntity方法以使用上下文为您获取它。我的理解是LINQ查询只是创建FetchXML而不会扩展关系,除非您特别请求它。您应该加入LINQ查询以获得所需的关系,但请注意,根据CRM2013SDK,LINQ查询仅支持内部联接。因此,您将无法检索丢失关系的记录。如果您使用SVCUtil生成具有SDK扩展程序集(可能难以在插件中使用)的早期绑定类型,则该扩展具有一个上下文,当您访问该属性时,该上下文会自动扩展。有关详细信息,请参阅Microsoft.Xrm.Client.CrmOrganizationServiceContext类,如果尚未通过调用Attach将实体附加到上下文,则需要这样做。请记住,这只是懒惰地对关系进行查询,因此它将在幕后进行多次查找。如果您想在一个查询中完成所有操作,并且需要LEFT联接,请尝试直接使用FetchXML。编辑:另请注意,在您指定的MSDN链接中,该示例试图显示相关实体如何为空,除非您调用LoadProperty。所以你可以简单地调用LoadProperty来加载你需要的东西。对于2016年CRM更新,一些事情发生了变化。您现在应该按照Daryl的建议使用LoadProperty方法。这会起作用。我正在使用CodeGeneration.CodeCustomization生成早期绑定实体,但不幸的是,CRM2016SDK似乎不再具有所需的Microsoft.Xrm.Client.CodeGeneration.dll。所以这种方式在2016年更新后就不再适用了。以上是C#学习教程:为什么我的CRM插件中的所有引用属性都是null?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: