public PocoDataBuilder Init() { var memberInfos = new List <MemberInfo>(); var columnInfos = GetColumnInfos(Type); // Get table info plan _tableInfoPlan = GetTableInfo(Type, columnInfos, memberInfos); // Get pocomember plan _memberPlans = GetPocoMembers(Mapper, columnInfos, memberInfos).ToList(); return(this); }
public PocoDataBuilder Init() { List <MemberInfo> memberInfos = new List <MemberInfo>(); ColumnInfo[] columnInfos = this.GetColumnInfos(this.Type); // Get table info plan this._tableInfoPlan = this.GetTableInfo(this.Type, columnInfos, memberInfos); // Get pocomember plan this._memberPlans = this.GetPocoMembers(this.Mapper, columnInfos, memberInfos).ToList(); return(this); }
public InitializedPocoDataBuilder Init() { var memberInfos = new List <MemberInfo>(); var columnInfos = GetColumnInfos(Type); // init the generator _generator = new FastCreate(Type, Mapper); // Get table info plan _tableInfoPlan = GetTableInfo(Type, columnInfos, memberInfos); // Get pocomember plan _memberPlans = GetPocoMembers(columnInfos, memberInfos).ToList(); return(this); }
public IEnumerable <PocoMemberPlan> GetPocoMembers(ColumnInfo[] columnInfos, List <MemberInfo> memberInfos, string prefix = null) { var capturedMembers = memberInfos.ToArray(); var capturedPrefix = prefix; foreach (var columnInfo in columnInfos) { if (columnInfo.IgnoreColumn) { continue; } var memberInfoType = columnInfo.MemberInfo.GetMemberInfoType(); if (columnInfo.ReferenceType == ReferenceType.Many) { var genericArguments = memberInfoType.GetGenericArguments(); memberInfoType = genericArguments.Any() ? genericArguments.First() : memberInfoType.GetTypeWithGenericTypeDefinitionOf(typeof(IList <>)).GetGenericArguments().First(); } var childrenPlans = new List <PocoMemberPlan>(); TableInfoPlan childTableInfoPlan = null; var members = new List <MemberInfo>(capturedMembers) { columnInfo.MemberInfo }; if (columnInfo.ComplexMapping || columnInfo.ReferenceType != ReferenceType.None) { if (capturedMembers.GroupBy(x => x.GetMemberInfoType()).Any(x => x.Count() >= 2)) { continue; } var childColumnInfos = GetColumnInfos(memberInfoType); if (columnInfo.ReferenceType != ReferenceType.None) { childTableInfoPlan = GetTableInfo(memberInfoType, childColumnInfos, members); } var newPrefix = JoinStrings(capturedPrefix, columnInfo.ReferenceType != ReferenceType.None ? "" : (columnInfo.ComplexPrefix ?? columnInfo.MemberInfo.Name)); childrenPlans.AddRange(GetPocoMembers(childColumnInfos, members, newPrefix)); } MemberInfo capturedMemberInfo = columnInfo.MemberInfo; ColumnInfo capturedColumnInfo = columnInfo; var accessors = GetMemberAccessors(members); var memberType = capturedMemberInfo.GetMemberInfoType(); var isList = IsList(capturedMemberInfo); var listType = GetListType(memberType, isList); var isDynamic = capturedMemberInfo.IsDynamic(); var fastCreate = GetFastCreate(memberType, Mapper, isList, isDynamic); var columnName = GetColumnName(capturedPrefix, capturedColumnInfo.ColumnName ?? capturedMemberInfo.Name); var memberInfoData = new MemberInfoData(capturedMemberInfo); yield return(tableInfo => { var pc = new PocoColumn { ReferenceType = capturedColumnInfo.ReferenceType, TableInfo = tableInfo, MemberInfoData = memberInfoData, MemberInfoChain = members, ColumnName = columnName, ResultColumn = capturedColumnInfo.ResultColumn, ExactColumnNameMatch = capturedColumnInfo.ExactColumnNameMatch, ForceToUtc = capturedColumnInfo.ForceToUtc, ComputedColumn = capturedColumnInfo.ComputedColumn, ComputedColumnType = capturedColumnInfo.ComputedColumnType, ColumnType = capturedColumnInfo.ColumnType, ColumnAlias = capturedColumnInfo.ColumnAlias, VersionColumn = capturedColumnInfo.VersionColumn, VersionColumnType = capturedColumnInfo.VersionColumnType, SerializedColumn = capturedColumnInfo.SerializedColumn, ValueObjectColumn = capturedColumnInfo.ValueObjectColumn, }; if (pc.ValueObjectColumn) { SetupValueObject(pc, fastCreate); } pc.SetMemberAccessors(accessors); var childrenTableInfo = childTableInfoPlan == null ? tableInfo : childTableInfoPlan(); var children = childrenPlans.Select(plan => plan(childrenTableInfo)).ToList(); // Cascade ResultColumn down foreach (var child in children.Where(child => child.PocoColumn != null && pc.ResultColumn)) { child.PocoColumn.ResultColumn = true; } var pocoMember = new PocoMember() { MemberInfoData = memberInfoData, MemberInfoChain = members, IsList = isList, IsDynamic = isDynamic, PocoColumn = capturedColumnInfo.ComplexMapping ? null : pc, ReferenceType = capturedColumnInfo.ReferenceType, ReferenceMemberName = capturedColumnInfo.ReferenceMemberName, PocoMemberChildren = children, }; pocoMember.SetMemberAccessor(accessors[accessors.Count - 1], fastCreate, listType); return pocoMember; }); } }
public InitializedPocoDataBuilder Init() { var memberInfos = new List<MemberInfo>(); var columnInfos = GetColumnInfos(Type); // Get table info plan _tableInfoPlan = GetTableInfo(Type, columnInfos, memberInfos); // Get pocomember plan _memberPlans = GetPocoMembers(Mapper, columnInfos, memberInfos).ToList(); return this; }
private IEnumerable <PocoMemberPlan> GetPocoMembers(MapperCollection mapper, ColumnInfo[] columnInfos, List <MemberInfo> memberInfos, string prefix = null) { MemberInfo[] capturedMembers = memberInfos.ToArray(); string capturedPrefix = prefix; foreach (ColumnInfo columnInfo in columnInfos) { if (columnInfo.IgnoreColumn) { continue; } Type memberInfoType = columnInfo.MemberInfo.GetMemberInfoType(); if (columnInfo.ReferenceType == ReferenceType.Many) { memberInfoType = memberInfoType.GetGenericArguments().First(); } PocoMemberPlan[] childrenPlans = new PocoMemberPlan[0]; TableInfoPlan childTableInfoPlan = null; List <MemberInfo> members = new List <MemberInfo>(capturedMembers) { columnInfo.MemberInfo }; if (columnInfo.ComplexMapping || columnInfo.ReferenceType != ReferenceType.None) { if (capturedMembers.GroupBy(x => x.GetMemberInfoType()).Any(x => x.Count() >= 2)) { continue; } ColumnInfo[] childColumnInfos = this.GetColumnInfos(memberInfoType); if (columnInfo.ReferenceType != ReferenceType.None) { childTableInfoPlan = this.GetTableInfo(memberInfoType, childColumnInfos, members); } string newPrefix = JoinStrings(capturedPrefix, columnInfo.ReferenceType != ReferenceType.None ? "" : (columnInfo.ComplexPrefix ?? columnInfo.MemberInfo.Name)); childrenPlans = this.GetPocoMembers(mapper, childColumnInfos, members, newPrefix).ToArray(); } MemberInfo capturedMemberInfo = columnInfo.MemberInfo; ColumnInfo capturedColumnInfo = columnInfo; List <MemberAccessor> accessors = this.GetMemberAccessors(members); Type memberType = capturedMemberInfo.GetMemberInfoType(); bool isList = IsList(capturedMemberInfo); Type listType = GetListType(memberType, isList); bool isDynamic = capturedMemberInfo.IsDynamic(); FastCreate fastCreate = GetFastCreate(memberType, mapper, isList, isDynamic); string columnName = this.GetColumnName(capturedPrefix, capturedColumnInfo.ColumnName ?? capturedMemberInfo.Name); MemberInfoData memberInfoData = new MemberInfoData(capturedMemberInfo); yield return(tableInfo => { PocoColumn pc = new PocoColumn { ReferenceType = capturedColumnInfo.ReferenceType, TableInfo = tableInfo, MemberInfoData = memberInfoData, MemberInfoChain = members, ColumnName = columnName, ResultColumn = capturedColumnInfo.ResultColumn, ForceToUtc = capturedColumnInfo.ForceToUtc, ComputedColumn = capturedColumnInfo.ComputedColumn, ComputedColumnType = capturedColumnInfo.ComputedColumnType, ColumnType = capturedColumnInfo.ColumnType, ColumnAlias = capturedColumnInfo.ColumnAlias, VersionColumn = capturedColumnInfo.VersionColumn, VersionColumnType = capturedColumnInfo.VersionColumnType, SerializedColumn = capturedColumnInfo.SerializedColumn }; pc.SetMemberAccessors(accessors); TableInfo childrenTableInfo = childTableInfoPlan == null ? tableInfo : childTableInfoPlan(); List <PocoMember> children = childrenPlans.Select(plan => plan(childrenTableInfo)).ToList(); // Cascade ResultColumn down foreach (PocoMember child in children.Where(child => child.PocoColumn != null && pc.ResultColumn)) { child.PocoColumn.ResultColumn = true; } PocoMember pocoMember = new PocoMember() { MemberInfoData = memberInfoData, MemberInfoChain = members, IsList = isList, IsDynamic = isDynamic, PocoColumn = capturedColumnInfo.ComplexMapping ? null : pc, ReferenceType = capturedColumnInfo.ReferenceType, ReferenceMemberName = capturedColumnInfo.ReferenceMemberName, PocoMemberChildren = children, }; pocoMember.SetMemberAccessor(accessors[accessors.Count - 1], fastCreate, listType); return pocoMember; }); } }