CRM 2011 中的 Microsoft.Xrm.Sdk.SaveChangesException

use*_*934 5 crm dynamics-crm-2011

我最近开始使用 CRM 2011 中的插件,但我遇到了在创建消息上注册的插件作为后期操作的问题。

当我将创建注册为后期操作时,我希望当我点击插件代码时,实体已经在数据库中创建,我应该能够创建一个相关实体(与新创建的实体相关)外键)在插件中。但是当我创建相关实体并更新它并说 SaveChanges() 时,它给了我一个 Microsoft.Xrm.SaveChangesException “处理此请求时发生错误”

如果我深入到内部异常,它只会指向 OrganizationServiceFault。它显示的堆栈跟踪是:

服务器堆栈跟踪:在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs , TimeSpan 超时) 在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Microsoft.Xrm。 Sdk.IOrganizationService.Execute(OrganizationRequest request) at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.ExecuteCore(OrganizationRequest request) at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.Execute(OrganizationRequest request) at Microsoft.Xrm.Sdk.Client。 OrganizationServiceContext.SaveChange(OrganizationRequest 请求,IList`1 结果

我只在创建消息上遇到这个问题,如果我对更新或删除执行相同的操作,它工作正常。有没有人遇到过这个问题?请提供一些关于我可以尝试解决此问题的意见。提前致谢!

另外,这是我的插件代码。

当创建 ct_repcode 实体时插件被触发,然后在我的插件中我创建了一个 ct_repcodeMember 实体,该实体具有一个链接到实际 ct_repcode 实体的 ct_repcodeid 字段。

Entity repcodeEntity = _context.InputParameters["Target"] as Entity;                 
Guid repcodeId = repcodeEntity.Id;

//Create a new Ct_repcodemember object    
Ct_repcodemember repcodeMember = new Ct_repcodemember();    
Guid repCodeMemberId = _service.Create(repcodeMember);

repcodeMember = _serviceContext.Ct_repcodememberSet.Where(a => a.Id == repCodeMemberId).FirstOrDefault();        
repcodeMember.ct_repcodeid = new EntityReference { Id = repcodeId };            

//Update the object and save the changes in crm    
_serviceContext.UpdateObject(repcodeMember);    
_serviceContext.SaveChanges(); // --- The timeout error happens here
Run Code Online (Sandbox Code Playgroud)

Got*_*bbs 2

我以前也遇到过这个问题。我认为问题在于,在 CRM 2011 中,当您仍在数据库事务中时,前操作和后操作都会发生。

我们解决这个问题的方法是将插件翻转为异步运行,因为不需要同步结果。

我不确定您当前的代码结构是否有另一种方法可以解决这个问题。我也没有尝试过这个,但考虑到您可以很好地创建实体,您可以创建带有填充查找的repcodeMember 实体吗?是否真的需要创建、检索然后更新?如果您有一些在创建相关实体时运行的代码,您也许可以与此插件共享该代码,这样您就可以直接创建,因为这是给您带来问题的更新。