【问题标题】:Error when creating multiple N:1 relationships for an entity为实体创建多个 N:1 关系时出错
【发布时间】:2011-01-19 14:13:20
【问题描述】:

我正在使用 MetadataService 创建 4 个实体并在它们之间创建关系。

实体是:TrexCalendarTrexFromTrexToTrexAddress

关系(都是 1:Many)是:TrexFrom - TrexAddressTrexCalendar - TrexFromTrexTo - TrexAddressTrexCalendar - TrexTo

当我运行我的代码时,所有实体都已成功创建,第一、第二和第四个关系也已成功创建。

创建第三个关系失败并显示以下详细信息:

0x80047007 实体:new_trexaddress 是具有 id 的实体的父级: 7a6af338-bc23-e011-ad8c-9f5d300a22fe。无法创建另一个父母 与实体的关系:new_trexto 平台

7a6af338-bc23-e011-ad8c-9f5d300a22fe 是 TrexFrom 实体的 ID。

因此,SDK 似乎不允许我在 TrexToTrexAddress 之间创建 1:N 关系,因为 TrexFromTrexAddress 之间存在 1:N 关系。

奇怪的是,我可以使用 Dynamics Web 界面手动创建这种关系。

任何想法可能会发生什么?如何以编程方式创建这两种关系?

我正在使用以下代码来创建关系:

OneToManyMetadata relationship = new OneToManyMetadata
{
    ReferencedEntity = "new_trexto",
    ReferencingEntity = "new_trexaddress"
    SchemaName = "new_trexto_trexaddress",
    AssociatedMenuBehavior = new CrmAssociatedMenuBehavior { Value = AssociatedMenuBehavior.UseCollectionName },
    CascadeAssign = new CrmCascadeType { Value = CascadeType.NoCascade },
    CascadeDelete = new CrmCascadeType { Value = CascadeType.RemoveLink },
    CascadeMerge = new CrmCascadeType { Value = CascadeType.NoCascade },
    CascadeReparent = new CrmCascadeType { Value = CascadeType.NoCascade },
    CascadeShare = new CrmCascadeType { Value = CascadeType.UserOwned },
    CascadeUnshare = new CrmCascadeType { Value = CascadeType.NoCascade }
};

LookupAttributeMetadata lookup = new LookupAttributeMetadata
{
    SchemaName = lookupName,
    RequiredLevel = new CrmAttributeRequiredLevel(AttributeRequiredLevel.Recommended),
    DisplayName = CrmServiceUtility.CreateSingleLabel("TrexTo - TrexAddress", 1033)
};

CreateOneToManyRequest request = new CreateOneToManyRequest
{
    OneToManyRelationship = relationship,
    Lookup = lookup
};

try
{
    metadataService.Execute(request);
    Debug.Print("Relationship created successfully");
}
catch (System.Web.Services.Protocols.SoapException ex)
{
    Debug.Print(ex.Detail.InnerText);
}

【问题讨论】:

  • 我可以通过省略设置任何 Cascade 值的代码行来实现此功能。

标签: dynamics-crm dynamics-crm-4


【解决方案1】:

如果两个关系都设置为“父母”,您可能需要将其中一个设置为“参考”

【讨论】:

  • 嗨,迈克。谢谢你的建议。默认情况下,关系是否创建为父母关系?我将如何将其中一个设置为引用关系?我已经编辑了我的问题以包含代码 sn-p。我做错了什么吗?
  • MS 的示例说将所有 Cascade 选项设置为“Cascade”以供父母使用。对于参考,请尝试为 Assign、Share、Unshare 和 Reparent 设置 Cascade None。设置为级联 - 删除链接以进行删除,并设置级联所有以进行合并。 msdn.microsoft.com/en-us/library/cc156290.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2013-11-20
相关资源
最近更新 更多