在 CRM 2015 SDK 中,当您使用 OrgService.Associate(包装在 try/catch 中)将 EntityReferenceCollection 与实体相关联时,如果任何一个 EntityReferences 失败,那么整个 ERC 是否会失败?或者说ERC中有10个ER,第7个失败了,是不是前6个成功了,后面的4个没有处理?还是 ERC 中的所有 10 个都得到处理和关联,除了失败的 #7?
这有意义吗?
在 CRM 2015 SDK 中,当您使用 OrgService.Associate(包装在 try/catch 中)将 EntityReferenceCollection 与实体相关联时,如果任何一个 EntityReferences 失败,那么整个 ERC 是否会失败?或者说ERC中有10个ER,第7个失败了,是不是前6个成功了,后面的4个没有处理?还是 ERC 中的所有 10 个都得到处理和关联,除了失败的 #7?
这有意义吗?
Associate消息在单个事务中处理,因此如果任何相关实体失败,则整个事务将回滚。
您可以轻松地执行以下代码对其进行测试:
EntityReferenceCollection relatedEntities = new EntityReferenceCollection();
relatedEntities.Add(new EntityReference("account", new Guid("A88C66DD-0B29-E811-8126-5065F38AEA61"))); // Existing account #1
relatedEntities.Add(new EntityReference("account", Guid.NewGuid())); // Non-existing account
relatedEntities.Add(new EntityReference("account", new Guid("BA647CEA-0B29-E811-8126-5065F38AEA61"))); // Existing account #3
service.Associate("contact", new Guid("0A3B1F8B-77F0-E711-811F-5065F38B06F1"), new Relationship("account_primary_contact"), relatedEntities);
这最终会抛出一个 FaultException:
System.ServiceModel.FaultException`1 发生 HResult=0x80131501
消息=Id = 50a65bfc-1ed3-49de-b910-adef17febe3b 的帐户不存在源=mscorlib StackTrace:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 类型) 在 Microsoft.Xrm.Sdk.IOrganizationService.Associate(String entityName, Guid entityId, 关系关系, EntityReferenceCollectionrelatedEntities)
您将能够检查没有为帐户#1 和#3 创建关联。