Dynamics crm 2011 OrganizationServiceContext:System.InvalidOperationException:上下文已在跟踪';联系方式';实体

Dynamics crm 2011 OrganizationServiceContext:System.InvalidOperationException:上下文已在跟踪';联系方式';实体,dynamics-crm-2011,dynamics-crm,Dynamics Crm 2011,Dynamics Crm,我正在尝试创建一个插件,如果父帐户的地址字段在帐户表单中发生更改,该插件将更改所有相关联系人的地址字段。我创建了一个插件,在预操作阶段(针对帐户实体更新消息)同步运行 我使用LINQ查询来检索所有相关的联系人,它可以正常工作。然后我使用foreach循环遍历所有联系人并更改他们的地址字段。我正在使用OrganizationServiceContext.AddObject();函数将每个联系人添加到跟踪管道(或其调用的任何内容),最后使用OrganizationServiceContext.Sav

我正在尝试创建一个插件,如果父帐户的地址字段在帐户表单中发生更改,该插件将更改所有相关联系人的地址字段。我创建了一个插件,在预操作阶段(针对帐户实体更新消息)同步运行

我使用LINQ查询来检索所有相关的联系人,它可以正常工作。然后我使用foreach循环遍历所有联系人并更改他们的地址字段。我正在使用OrganizationServiceContext.AddObject();函数将每个联系人添加到跟踪管道(或其调用的任何内容),最后使用OrganizationServiceContext.SaveChanges();尝试保存所有联系人。但那是我得到这个错误的时候:

System.InvalidOperationException:上下文已在跟踪“联系人”实体

这是我的密码

//更新子联系人字段
if(context.PreEntityImages.Contains(“preAccount”)&&context.InputParameters.Contains(“目标”)&&context.InputParameters[“目标”]是实体){
如果(((实体)context.InputParameters[“Target”])包含(“address2_name”)){
实体帐户=(实体)上下文。输入参数[“目标”];
实体预帐户=(实体)上下文.PreEntityImages[“preAccount”];
如果(账户[“地址2\u名称”]!=预账户[“地址2\u名称”]){
EntityReference parentCustomer=新的EntityReference(account.LogicalName,account.Id);
Contact[]childContacts=orgService.ContactSet.Where(id=>id.ParentCustomerId==parentCustomer.ToArray();
foreach(儿童联系人中的联系人){
contact.Address2_Name=(字符串)帐户[“Address2_Name”];
orgService.AddObject(联系人);
}
orgService.SaveChanges();
}
}
}

我做错了什么?

在使用查询检索联系人时,您已经将实体附加到上下文

Contact[]childContacts=orgService.ContactSet.Where(id=>id.ParentCustomerId==parentCustomer.ToArray();
因此,您不需要再次将实体添加到上下文中,而是需要通过以下方式更新它们:

orgService.UpdateObject(联系人);//此行而不是orgService.AddObject(联系人);

在检索带有查询的联系人时,您已经将实体附加到上下文

Contact[]childContacts=orgService.ContactSet.Where(id=>id.ParentCustomerId==parentCustomer.ToArray();
因此,您不需要再次将实体添加到上下文中,而是需要通过以下方式更新它们:

orgService.UpdateObject(联系人);//此行而不是orgService.AddObject(联系人);