protected override Expression VisitEntitySetExpression(EntitySetExpression expression) { var tupleExpression = GetTupleExpression(expression); var materializedEntitySetExpression = MaterializeThroughOwner(expression, tupleExpression); var prefetechMethodInfo = MaterializationHelper.PrefetchEntitySetMethodInfo .MakeGenericMethod(expression.Type); var prefetchEntitySetExpression = Expression.Call( prefetechMethodInfo, materializedEntitySetExpression, itemMaterializationContextParameter); return(prefetchEntitySetExpression); }
/// <summary> /// Creates an entity set creator, to be used at run-time /// </summary> /// <param name="expression"></param> /// <param name="dataRecordParameter"></param> /// <param name="mappingContextParameter"></param> /// <param name="builderContext"></param> /// <returns></returns> protected virtual Expression GetEntitySetBuilder(EntitySetExpression expression, ParameterExpression dataRecordParameter, ParameterExpression mappingContextParameter, BuilderContext builderContext) { var entityType = expression.EntitySetType.GetGenericArguments()[0]; List <ElementInit> members = new List <ElementInit>(); var add = expression.EntitySetType.GetMethod("Add", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(KeyValuePair <object, MemberInfo>) }, null); foreach (var info in expression.Columns) { var column = info.Key; var tk = info.Value; MemberInfo memberInfo = column.StorageInfo ?? column.MemberInfo; PropertyInfo propertyInfo = memberInfo as PropertyInfo; if (propertyInfo == null || propertyInfo.CanWrite) { var parameterColumn = GetOutputValueReader(column, dataRecordParameter, mappingContextParameter, builderContext); members.Add(Expression.ElementInit(add, new Expression[] { Expression.New(typeof(KeyValuePair <object, MemberInfo>).GetConstructor(new Type[] { typeof(object), typeof(MemberInfo) }), Expression.Convert(parameterColumn, typeof(object)), Expression.Constant(tk.Member, typeof(MemberInfo))) })); } } return(Expression.ListInit( Expression.New( expression.EntitySetType.GetConstructor( BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(DataContext) }, null), Expression.Constant(builderContext.QueryContext.DataContext)), members)); }
protected override Expression VisitEntitySetExpression(EntitySetExpression expression) { return(expression); }
protected override Expression VisitEntitySetExpression(EntitySetExpression es) { VisitEntityExpression((EntityExpression)es.Owner); return(es); }
protected virtual Expression VisitEntitySetExpression(EntitySetExpression expression) { return(expression); }