为实体创建多个 N:1 关系时出错

发布于 2024-10-12 15:35:16 字数 2237 浏览 3 评论 0原文

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

这些实体为:TrexCalendarTrexFromTrexToTrexAddress

关系(均为 1:Many)为:< code>TrexFrom - TrexAddress、TrexCalendar - 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 关系,因为 TrexFrom 之间存在 1:N 关系代码>和<代码>TrexAddress。

奇怪的是,我可以使用 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);
}

I am using the MetadataService to create 4 entities and create relationships between them.

The entities are: TrexCalendar, TrexFrom, TrexTo, TrexAddress

The relationships (all 1:Many) are:TrexFrom - TrexAddress, TrexCalendar - TrexFrom, TrexTo - TrexAddress, TrexCalendar - TrexTo

When I run my code the entities are all created successfully and the first, second and fourth relationships are created successfully.

Creating the third relationship fails with the following details:

0x80047007 Entity: new_trexaddress is parented to Entity with id:
7a6af338-bc23-e011-ad8c-9f5d300a22fe. Cannot create another parental
relation with Entity: new_trexto Platform

7a6af338-bc23-e011-ad8c-9f5d300a22fe is the id for the TrexFrom entity.

So it looks like the SDK won't allow me to create a 1:N relationship between TrexTo and TrexAddress because a 1:N relationship exists between TrexFrom and TrexAddress.

What's weird is that I am able to create this relationship manually using the Dynamics web interface.

Any ideas what might be going on? How can I create both relationships programmatically?

I'm using the following code to create the relationships:

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);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

说谎友 2024-10-19 15:35:16

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

If both relationships are set as "Parental", you'll probably need to set one of them as "Referential"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文