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);
}
If both relationships are set as "Parental", you'll probably need to set one of them as "Referential"