internal ClassJoinDefine(ClassDefineMetadata metadata, ClassJoinType joinType, MemberInfo member, Action <TEntity, HasManyByForeignKeyDefine> foreignKeyDefine) : this(metadata, joinType, member) { switch (joinType) { case ClassJoinType.HasManyByForeignKey: joinMetadata.DataProcesser = new HasManyByForeignKeyClassJoinProcessor <TEntity, TJoin>(foreignKeyDefine, joinMetadata); break; default: throw new NotSupportedException(); } }
internal ClassJoinDefine(ClassDefineMetadata metadata, ClassJoinType joinType, MemberInfo member, Func <TEntity, ISpecification <TJoin>, ISpecification <TJoin> > joinExpr) : this(metadata, joinType, member) { switch (joinType) { case ClassJoinType.HasOne: joinMetadata.DataProcesser = new HasOneClassJoinProcessor <TEntity, TJoin>(joinExpr, joinMetadata); break; case ClassJoinType.HasMany: joinMetadata.DataProcesser = new HasManyClassJoinProcessor <TEntity, TJoin>(joinExpr, joinMetadata); break; default: throw new NotSupportedException(); } }
private ClassJoinDefine(ClassDefineMetadata metadata, ClassJoinType joinType, MemberInfo member) { this.metadata = metadata; this.joinType = joinType; this.member = member; joinMetadata = new ClassJoinDefineMetadata(); joinMetadata.JoinName = member.Name; var property = member as PropertyInfo; if (property != null) { var getMethod = property.GetGetMethod(true); if (getMethod == null) { throw new PlatformException("类型 {0} 的级联属性 {1} 必须可读。", member.DeclaringType, member.Name); } joinMetadata.Method = getMethod; joinMetadata.JoinType = MethodJoinType.PropertyGet; // set var setMethod = property.GetSetMethod(true); if (setMethod == null) { throw new PlatformException("类型 {0} 的级联属性 {1} 必须可写。", member.DeclaringType, member.Name); } var setDefine = new ClassJoinDefineMetadata(); setDefine.Method = setMethod; setDefine.JoinType = MethodJoinType.PropertySet; setDefine.JoinName = member.Name; metadata.ClassJoinDefines.Add(setDefine.Method, setDefine); } else { joinMetadata.JoinType = MethodJoinType.Method; joinMetadata.Method = (MethodInfo)member; } metadata.ClassJoinDefines.Add(joinMetadata.Method, joinMetadata); }