private void RegisterBidirectionalRelation <TEntity1, TEntity2>(MemberInfo member1, MemberInfo member2) { var relation1 = new RelationOn(typeof(TEntity1), member1, typeof(TEntity2)); var relation2 = new RelationOn(typeof(TEntity2), member2, typeof(TEntity1)); ThrowsWhereAmbiguous(relation1, member2); ThrowsWhereAmbiguous(relation2, member1); explicitDeclarations.BidirectionalMembers[relation1] = member2; explicitDeclarations.BidirectionalMembers[relation2] = member1; }
public virtual Cascade?ApplyCascade(Type from, MemberInfo on, Type to) { var relationOn = new RelationOn(from, on, to); Cascade resultByClasses; var relation = new Relation(from, to); if (explicitDeclarations.Cascades.TryGetValue(relation, out resultByClasses)) { // Has Explicit Cascade By Classes return(resultByClasses); } return(Patterns.Cascades.GetValueOfFirstMatch(relationOn)); }
private void ThrowsWhereAmbiguous(RelationOn relation, MemberInfo actualMember) { MemberInfo alreadyRegisteredMember; if (explicitDeclarations.BidirectionalMembers.TryGetValue(relation, out alreadyRegisteredMember)) { if (!alreadyRegisteredMember.Equals(actualMember)) { var message = new StringBuilder(500); message.AppendLine("Ambiguous registration of bidirectional relation on specific property:"); message.AppendLine(string.Format("Was defined for '{0}.{1}' to '{2}.{3}' ", relation.From.FullName, relation.On.Name, relation.To.FullName, alreadyRegisteredMember.Name)); message.AppendLine(string.Format("Then defined for '{0}.{1}' to '{2}.{3}' ", relation.From.FullName, relation.On.Name, relation.To.FullName, actualMember.Name)); throw new MappingException(message.ToString()); } } }
public bool Equals(RelationOn that) { return(that != null && On.Equals(that.On)); }
public bool Equals(RelationOn that) { return that != null && On.Equals(that.On); }