public static IRelationshipDef CreateReverseRelationship(ClassDefCol classDefCol, IClassDef classDef, IRelationshipDef relationship)
{
IRelationshipDef rel = relationship;
if (!ContainsRelatedClass(relationship, classDefCol)) return null;
IClassDef relatedClassDef = RelatedObjectClassDef(classDefCol, relationship);
bool foundReverseRelationship = relatedClassDef.RelationshipDefCol.Any(
def => def.RelationshipName == rel.ReverseRelationshipName);
if (foundReverseRelationship) return null;
IRelationshipDef newReverseRelDef = CreateReverseRelDef(rel, classDef);
relatedClassDef.RelationshipDefCol.Add(newReverseRelDef);
IRelPropDef relPropDef = relationship.RelKeyDef.FirstOrDefault();
if (relPropDef != null)
{
var reverseRelPropDef = new RelPropDef(relPropDef.RelatedClassPropName, relPropDef.OwnerPropertyName);
newReverseRelDef.RelKeyDef.Add(reverseRelPropDef);
bool hasPropDef = relatedClassDef.PropDefColIncludingInheritance.Any(
propDef => propDef.PropertyName == reverseRelPropDef.OwnerPropertyName);
if (!hasPropDef)
{
var fkPropDef = new PropDef(reverseRelPropDef.OwnerPropertyName, typeof (Guid), PropReadWriteRule.ReadWrite, null);
relatedClassDef.PropDefcol.Add(fkPropDef);
}
}
return newReverseRelDef;
}