private RelationshipInfo CreateExtentedEntity(DataPathJoin join, OrmEntity leftEntity, OrmEntity rightEntity, string leftKeyField, string rightKeyField) { if (leftEntity.ExtendedEntity == rightEntity) { return new RelationshipInfo(rightEntity, leftEntity, true); } else if (rightEntity.ExtendedEntity == leftEntity) { return new RelationshipInfo(leftEntity, rightEntity, false); } else { int leftSimilarity = MeasureSimilarity(join.FromTable, leftKeyField); int rightSimilarity = MeasureSimilarity(join.ToTable, rightKeyField); if (leftSimilarity == rightSimilarity) { LogError("Unable to establish owning table in join '{0}'", join); return null; } RelationshipInfo relationship = (rightSimilarity > leftSimilarity ? CreateExtentedEntity(rightEntity, leftEntity, true) : CreateExtentedEntity(leftEntity, rightEntity, false)); leftEntity.Validate(); leftEntity.Save(); rightEntity.Validate(); rightEntity.Save(); return relationship; } }