Sas*_*cha 5 c# plugins crm dynamics-crm-2011 dynamics-crm-2013
我正在使用早期绑定在联系人实体上编写PostUpdate插件.
不幸的是,所有应该代表1:x关系的属性都是null.
代码非常简单:
*CRMcontext是通过CrmSvcUtil.exe生成的文件,
*service是来自LocalPluginContext的IOrganizationService:
using ( var serviceContext = new CRMcontext(service) )
{
// This works fine
var contact = serviceContext.CreateQuery<Contact>().First(c => c.Id == context.PrimaryEntityId);
// why is currency null after this line?! (and yes, it's set in the entity)
var currency = contact.transactioncurrency_contact;
}
Run Code Online (Sandbox Code Playgroud)
我按照这个例子(最后一个代码片段):http://msdn.microsoft.com/en-us/library/gg695791.aspx
谢谢你的帮助!
编辑:
/// <summary>
/// N:1 transactioncurrency_contact
/// </summary>
[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("transactioncurrencyid")]
[Microsoft.Xrm.Sdk.RelationshipSchemaNameAttribute("transactioncurrency_contact")]
public TransactionCurrency transactioncurrency_contact
{
get
{
return this.GetRelatedEntity<TransactionCurrency>("transactioncurrency_contact", null);
}
set
{
this.OnPropertyChanging("transactioncurrency_contact");
this.SetRelatedEntity<TransactionCurrency>("transactioncurrency_contact", null, value);
this.OnPropertyChanged("transactioncurrency_contact");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我的理解是,LINQ 查询只会创建 FetchXML,除非您特别请求,否则它不会扩展关系。
您应该在 LINQ 查询中执行联接以获得所需的关系,但请注意,根据 CRM 2013 SDK,LINQ 查询仅支持内部联接。因此,您将无法取回缺少关系的记录。
如果您使用 SVC Util 通过 SDK 扩展程序集生成早期绑定类型(这可能很难在插件中使用),则扩展所具有的上下文能够在您访问属性时自动扩展。有关详细信息,请参阅该类Microsoft.Xrm.Client.CrmOrganizationServiceContext,如果尚未通过调用 Attach 将实体附加到上下文,则需要将其附加到上下文。请记住,这只是惰性地对关系进行查询,因此在幕后将进行多个查询。
如果您希望将所有内容包含在一个查询中,并且需要 LEFT 连接,请尝试直接使用 FetchXML。
编辑:另请注意,在您指定的 MSDN 链接中,该示例试图显示相关实体如何为空,除非您调用 LoadProperty。因此,您只需调用 LoadProperty 即可加载您需要的内容。