protected virtual string GetManyToManyTableName(PropertyPath subject) { var manyToManyRelation = GetRelation(subject.LocalMember); var fromMany = manyToManyRelation.From; var toMany = manyToManyRelation.To; bool fromIsMaster = DomainInspector.IsMasterManyToMany(fromMany, toMany); bool toIsMaster = DomainInspector.IsMasterManyToMany(toMany, fromMany); fromMany = subject.GetContainerEntity(DomainInspector); string[] names; if (fromIsMaster == toIsMaster) { names = (from t in (new[] { fromMany, toMany }) orderby t.Name select t.Name).ToArray(); } else { names = fromIsMaster ? new[] { fromMany.Name, toMany.Name } : new[] { toMany.Name, fromMany.Name }; } return(GetTableNameForRelation(names)); }
protected virtual string GetManyToManyTableName(PropertyPath subject) { var manyToManyRelation = GetRelation(subject.LocalMember); var fromMany = manyToManyRelation.From; var toMany = manyToManyRelation.To; bool fromIsMaster = DomainInspector.IsMasterManyToMany(fromMany, toMany); bool toIsMaster = DomainInspector.IsMasterManyToMany(toMany, fromMany); fromMany = subject.GetContainerEntity(DomainInspector); var explicitBidirectionalMember = DomainInspector.GetBidirectionalMember(fromMany, subject.LocalMember, toMany); if (explicitBidirectionalMember == null) { Relation[] twoRelations = GetTwoRelation(fromMany, fromIsMaster, toMany, toIsMaster); return(GetTableNameForRelation(twoRelations[0], twoRelations[1])); } else { RelationOn[] twoRelationOn = GetTwoRelationOn(fromMany, fromIsMaster, subject, toMany, toIsMaster, explicitBidirectionalMember); return(GetTableNameForRelationOnProperty(twoRelationOn[0], twoRelationOn[1])); } }