为实体创建多个 N:1 关系时出错
我正在使用 MetadataService 创建 4 个实体并在它们之间创建关系。
这些实体为:TrexCalendar
、TrexFrom
、TrexTo
、TrexAddress
关系(均为 1:Many)为:< code>TrexFrom - TrexAddress、TrexCalendar - TrexFrom
、TrexTo - TrexAddress
、TrexCalendar - TrexTo
当我运行代码时,实体是全部创建成功,第一、二、四关系创建成功。
创建第三个关系失败,并显示以下详细信息:
0x80047007 实体:new_trexaddress 的父级为 ID 为: 7a6af338-bc23-e011-ad8c-9f5d300a22fe。无法创建另一个家长 与实体的关系:new_trexto 平台
7a6af338-bc23-e011-ad8c-9f5d300a22fe 是 TrexFrom
实体的 ID。
因此,SDK 似乎不允许我在 TrexTo
和 TrexAddress
之间创建 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果两种关系都设置为“父母”,您可能需要将其中之一设置为“参考”
If both relationships are set as "Parental", you'll probably need to set one of them as "Referential"