protected override IObjectModel VisitNew(NewExpression exp) { IObjectModel result = new ComplexObjectModel(exp.Constructor); ParameterInfo[] parames = exp.Constructor.GetParameters(); for (int i = 0; i < parames.Length; i++) { ParameterInfo pi = parames[i]; Expression argExp = exp.Arguments[i]; if (MappingTypeSystem.IsMappingType(pi.ParameterType)) { DbExpression dbExpression = this.ResolveExpression(argExp); result.AddConstructorParameter(pi, dbExpression); } else { IObjectModel subResult = this.Visit(argExp); result.AddConstructorParameter(pi, (ComplexObjectModel)subResult); } } return(result); }
public IObjectModel ToNewObjectModel(DbSqlQueryExpression sqlQuery, DbTable table, DbMainTableExpression dependentTable) { ComplexObjectModel newModel = new ComplexObjectModel(this.ConstructorDescriptor); newModel.DependentTable = dependentTable; newModel.IncludeCollections.AddRange(this.IncludeCollections); foreach (var kv in this.PrimitiveConstructorParameters) { ParameterInfo pi = kv.Key; DbExpression exp = kv.Value; DbColumnAccessExpression cae = null; cae = ObjectModelHelper.ParseColumnAccessExpression(sqlQuery, table, exp, pi.Name); newModel.AddConstructorParameter(pi, cae); } foreach (var kv in this.ComplexConstructorParameters) { ParameterInfo pi = kv.Key; IObjectModel val = kv.Value; ComplexObjectModel complexMemberModel = val.ToNewObjectModel(sqlQuery, table, dependentTable) as ComplexObjectModel; newModel.AddConstructorParameter(pi, complexMemberModel); } foreach (var kv in this.PrimitiveMembers) { MemberInfo member = kv.Key; DbExpression exp = kv.Value; DbColumnAccessExpression cae = ObjectModelHelper.ParseColumnAccessExpression(sqlQuery, table, exp, member.Name); newModel.AddPrimitiveMember(member, cae); if (exp == this.PrimaryKey) { newModel.PrimaryKey = cae; if (this.NullChecking == this.PrimaryKey) { newModel.NullChecking = cae; } } } foreach (var kv in this.ComplexMembers) { MemberInfo member = kv.Key; IObjectModel val = kv.Value; ComplexObjectModel complexMemberModel = val.ToNewObjectModel(sqlQuery, table, dependentTable) as ComplexObjectModel; newModel.AddComplexMember(member, complexMemberModel); } if (newModel.NullChecking == null) { newModel.NullChecking = ObjectModelHelper.TryGetOrAddNullChecking(sqlQuery, table, this.NullChecking); } return(newModel); }