예제 #1
0
        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;
            }
        }