예제 #1
0
        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));
        }
예제 #3
0
        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());
                }
            }
        }
예제 #4
0
 public bool Equals(RelationOn that)
 {
     return(that != null && On.Equals(that.On));
 }
예제 #5
0
파일: RelationOn.cs 프로젝트: Mrding/Ribbon
		public bool Equals(RelationOn that)
		{
			return that != null && On.Equals(that.On);
		}