如果父帐户的地址字段在帐户表单中更改,我正在尝试创建一个插件来更改所有相关联系人的地址字段。我创建了一个插件以同步运行在预操作阶段(针对帐户实体更新消息)。
我使用 LINQ 查询来检索所有相关的联系人并且它有效。然后我使用 foreach 循环遍历所有联系人并更改它们的地址字段。我正在使用 OrganizationServiceContext.AddObject(); 将每个联系人添加到跟踪管道(或任何名称)的函数,最后我使用的是 OrganizationServiceContext.SaveChanges(); 试图保存所有联系人。但这就是我收到此错误的时候:
System.InvalidOperationException:上下文已经在跟踪“联系人”实体。
这是我的代码
// Updating child contacts' fields
if (context.PreEntityImages.Contains("preAccount") && context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) {
if (((Entity)context.InputParameters["Target"]).Contains("address2_name")) {
Entity account = (Entity)context.InputParameters["Target"];
Entity preAccount = (Entity)context.PreEntityImages["preAccount"];
if (account["address2_name"] != preAccount["address2_name"]) {
EntityReference parentCustomer = new EntityReference(account.LogicalName, account.Id);
Contact[] childContacts = orgService.ContactSet.Where(id => id.ParentCustomerId == parentCustomer).ToArray();
foreach (Contact contact in childContacts) {
contact.Address2_Name = (string)account["address2_name"];
orgService.AddObject(contact);
}
orgService.SaveChanges();
}
}
}
我做错了什么?