Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm 2011 CRM 2011中的Microsoft.Xrm.Sdk.SaveChangesException_Dynamics Crm 2011_Crm - Fatal编程技术网

Dynamics crm 2011 CRM 2011中的Microsoft.Xrm.Sdk.SaveChangesException

Dynamics crm 2011 CRM 2011中的Microsoft.Xrm.Sdk.SaveChangesException,dynamics-crm-2011,crm,Dynamics Crm 2011,Crm,我最近开始在CRM 2011中使用插件,我在创建消息上注册插件作为Post操作时遇到问题 当我注册创建为post操作时,我希望当我点击插件代码时,实体已经在数据库中创建,我应该能够在插件中创建相关实体(通过外键与新创建的实体相关)。但是,当我创建并更新相关实体,并说SaveChanges()时,它会给我一个Microsoft.Xrm.SaveChangesException“处理此请求时出错” 如果我深入到内部异常,它只会指向OrganizationServiceFault。它显示的堆栈跟踪是:

我最近开始在CRM 2011中使用插件,我在创建消息上注册插件作为Post操作时遇到问题

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

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

服务器堆栈跟踪: 位于System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime操作,ProxyRpc&rpc) 在System.ServiceModel.Channels.ServiceChannel.Call(字符串操作、布尔单向、ProxyOperationRuntime操作、对象[]输入、对象[]输出、时间跨度超时) 位于System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage方法调用,ProxyOperationRuntime操作) 位于System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息)

在[0]处重试异常: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) at System.Runtime.Remoting.proxy.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型) 在Microsoft.Xrm.Sdk.IOrganizationService.Execute(OrganizationRequest)中 位于Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.ExecuteCore(OrganizationRequest请求) 在Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.Execute(OrganizationRequest请求) 在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

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

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


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

我认为您所做的:通过上下文创建、查找和更新实体不是一个好方法。您可以创建一个实体,我指的是对象更新,然后创建它通过服务。我已经把代码如下

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

Ct_repcodemember repcodeMember = new Ct_repcodemember();    

repcodeMember.ct_repcodeid = new EntityReference { Id = repcodeId }; 

_service.Create(repcodeMember);

您还可以尝试设置ct_repcodeid实体引用的逻辑名称,看起来您只是在设置Id。

请相信@rocksolid和@patricgh,我只是采纳了他们的建议,将它们结合起来,并在其周围添加了一个代码示例。

您应该停止使用此操作的
服务上下文
,并使用CRM的默认CRUD功能。您的
EntityReference
不正确,因为您必须有一个逻辑名称,但由于您已经有一个
实体
,您应该只使用
EntityReference
来设置该值

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

Ct_repcodemember repcodeMember = new Ct_repcodemember();    

repcodeMember.ct_repcodeid = repcodeEntity.ToEntityReference(); 

_service.Create(repcodeMember);

你能展示一些代码吗?你如何关联这些记录?@ckeller:我已经用一段代码片段更新了我的原始问题。另外,有点离题,但你是否尝试设置远程调试会话,以查看这些变量在运行时的值是什么?@PeterMajeed-是的。我已经设置了远程调试,我看到repcodeMember对象和Id被创建并返回,但当我说SaveChanges时,它超时了。有人知道我在这段代码中可能出了什么问题吗?