一次事务创建父子实体,AddRelatedObject抛出异常

Creating a parent and child entity in one transaction, AddRelatedObject throws an exception

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

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

文档说这是用 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 时出现异常:

Message: An error occured while processing this request.
Inner Message: Cannot find record to be updated

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

知道我做错了什么吗?

引用 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();

我的问题原来是连接到 child 实体的单独工作流试图更新 parent 实体。它很沮丧,因为它假设有 parent 而实际上没有。

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

我没有意识到其他 plugins/workflows 引起的错误会冒泡到我的身上。

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

  • 针对 parent 或 child 实体注册的插件
  • 与 parent 或 child 个实体关联的工作流程