public static RelationshipModel Parse(EntityModel parent, eRelationshipType type, RelationshipMetadataBase metadata) { switch (type) { case eRelationshipType.OneToMany: var rel1N = (OneToManyRelationshipMetadata)metadata; return(new RelationshipModel( parent, schemaName: metadata.SchemaName, displayName: metadata.DisplayName(), privateName: "_n1" + metadata.PrivatePropertyName(), fromEntityName: rel1N.ReferencedEntity, fromFieldName: rel1N.ReferencedAttribute, toEntityName: rel1N.ReferencingEntity, toFieldName: rel1N.ReferencingAttribute, intersectingEntityName: string.Empty)); case eRelationshipType.ManyToOne: var relN1 = (OneToManyRelationshipMetadata)metadata; return(new RelationshipModel( parent, schemaName: metadata.SchemaName, displayName: metadata.DisplayName(), privateName: "_1n" + metadata.PrivatePropertyName(), fromEntityName: relN1.ReferencingEntity, fromFieldName: relN1.ReferencingAttribute, toEntityName: relN1.ReferencedEntity, toFieldName: relN1.ReferencedAttribute, intersectingEntityName: string.Empty)); case eRelationshipType.ManyToMany: var relMN = (ManyToManyRelationshipMetadata)metadata; return(new RelationshipModel( parent, schemaName: metadata.SchemaName, displayName: metadata.DisplayName(), privateName: "_mn" + metadata.PrivatePropertyName(), fromEntityName: relMN.Entity1LogicalName, fromFieldName: relMN.Entity1IntersectAttribute, toEntityName: relMN.Entity2LogicalName, toFieldName: relMN.Entity2IntersectAttribute, intersectingEntityName: relMN.IntersectEntityName)); } throw new Exception("Unsupported relationship type."); }