Exemplo n.º 1
0
        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));
        }
Exemplo n.º 3
0
 protected override Expression VisitEntitySetExpression(EntitySetExpression expression)
 {
     return(expression);
 }
 protected override Expression VisitEntitySetExpression(EntitySetExpression es)
 {
     VisitEntityExpression((EntityExpression)es.Owner);
     return(es);
 }
Exemplo n.º 5
0
 protected virtual Expression VisitEntitySetExpression(EntitySetExpression expression)
 {
     return(expression);
 }