【问题标题】:Creating a parent and child entity in one transaction, AddRelatedObject throws an exception在一个事务中创建父子实体,AddRelatedObject 抛出异常
【发布时间】:2019-02-07 11:16:36
【问题描述】:

我创建了一个程序集以在 Dynamics 365 v9 的工作流中使用。

我有一个父实体,它与我的子实体具有 1:N 父级关系。 我想在同一个事务中创建父级和子级,这样如果有任何失败,整个事情都会回滚。

文档说这是通过AddRelatedObject 方法完成的。

var parent = new Parent()
{
    Name = "PARENT"
};

var child = new Child()
{
    Name = "CHILD"
};

crmContext.AddObject(parent);
crmContext.AddRelatedObject(parent, new Relationship("my_relationship"), child);
crmContext.SaveChanges();

Parent 和 Child 的类是使用 XrmToolbox 的 Early Bound Generator 插件创建的,并且没有被更改。

当我打电话给SaveChanges 时,我得到了异常:

消息:处理此请求时发生错误。
内部消息:找不到要更新的记录

我不知道为什么会这样。相同的代码适用于 CRM 2011。 如果我删除 AddRelatedObject 行,则创建父级就好了。

任何想法我做错了什么?

【问题讨论】:

    标签: c# dynamics-crm workflow


    【解决方案1】:

    引用this question 上的回答,您可能想试一试:

    EntityA primaryEntity = new EntityA() { //initialise me... };
    EntityB secondaryEntity = new EntityB() { //initialise me... };
    
    context.AddObject(primaryEntity);
    context.AddObject(secondaryEntity);
    
    // This is the key part: explicitly link the two entities
    context.AddLink(primaryEntity, 
        new Relationship("relationship_name_here"), secondaryEntity);
    
    // commit changes to CRM
    context.SaveChanges();
    

    【讨论】:

    • AddRelatedObject 方法基本上是同时调用这两个方法,所以这段代码和我的一样,会抛出异常。
    【解决方案2】:

    对我来说,问题原来是连接到尝试更新父实体的子实体的单独工作流。它很不高兴,因为它假设没有父母。

    如果没有父记录现在已经解决了错误,我会在工作流的开头放置一个Check Condition 以终止它。

    我没有意识到其他插件/工作流程中导致的错误会冒泡到我的身上。

    对于遇到此错误的其他人,我会检查两件事:

    • 针对父实体或子实体注册的插件
    • 与父实体或子实体关联的工作流

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 2023-03-10
      • 1970-01-01
      • 2016-11-16
      • 2017-03-11
      • 2023-03-30
      • 2020-12-10
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多