【问题标题】:OrganizationServiceContext: System.InvalidOperationException: The context is already tracking the 'contact' entityOrganizationServiceContext:System.InvalidOperationException:上下文已经在跟踪“联系人”实体
【发布时间】:2013-09-08 11:42:12
【问题描述】:

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

我使用 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();
        }
    }
}

我做错了什么?

【问题讨论】:

    标签: dynamics-crm-2011 dynamics-crm


    【解决方案1】:

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

    Contact[] childContacts = orgService.ContactSet.Where(id => id.ParentCustomerId == parentCustomer).ToArray();
    

    因此您不需要再次将实体添加到上下文中,而是需要通过以下方式更新它们:

    orgService.UpdateObject(contact); // this row instead of orgService.AddObject(contact);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      相关资源
      最近更新 更多