public TypeMapperVisitor(ODataClient.OdataToEntity.Test.Model.Container container)
        {
            _container = container;

            _navigationPropertyAccessors = new List <LambdaExpression>();
            _parameters = new Dictionary <ParameterExpression, ParameterExpression>();
        }
示例#2
0
        private async Task <IList> ExecuteOe <T, TResult>(LambdaExpression lambda, int maxPageSize)
        {
            ODataClient.OdataToEntity.Test.Model.Container container = CreateContainer(maxPageSize);
            var visitor = new TypeMapperVisitor(container)
            {
                TypeMap = t => Type.GetType("ODataClient." + t.FullName)
            };
            var call = visitor.Visit(lambda.Body);

            IQueryable query = GetQuerableOe(container, typeof(T));
            Type       elementType;

            if (call.Type.GetTypeInfo().IsGenericType)
            {
                elementType = call.Type.GetGenericArguments()[0];
                ExecuteQueryFuncAsync <Object> func = ExecuteQueryAsync <Object>;
                return(await CreateDelegate(elementType, func)(query, call, visitor.NavigationPropertyAccessors));
            }
            else
            {
                elementType = typeof(Object);
                ExecuteQueryFunc <Object> func = ExecuteQueryScalar <Object>;
                return(CreateDelegate(elementType, func)(query, call));
            }
        }
示例#3
0
 public static ODataClient.OdataToEntity.Test.Model.Container CreateContainer(int maxPageSize)
 {
     ODataClient.OdataToEntity.Test.Model.Container container = ContainerFactory();
     if (maxPageSize > 0)
     {
         container.BuildingRequest += (s, e) => { e.Headers.Add("Prefer", "odata.maxpagesize=" + maxPageSize.ToString(CultureInfo.InvariantCulture)); }
     }
     ;
     return(container);
 }
示例#4
0
        public async Task Initalize()
        {
            ODataClient.OdataToEntity.Test.Model.Container container = CreateContainer(0);
            await container.ResetDb().ExecuteAsync();

            await container.ResetManyColumns().ExecuteAsync();

            if (!_clear)
            {
                AspClient.BatchTest.Add(container);
                await container.SaveChangesAsync(SaveChangesOptions.BatchWithSingleChangeset);
            }
        }
示例#5
0
        internal static IQueryable GetQuerableOe(ODataClient.OdataToEntity.Test.Model.Container container, Type entityType)
        {
            if (entityType == typeof(Category))
            {
                return(container.Categories);
            }
            if (entityType == typeof(Customer))
            {
                return(container.Customers);
            }
            if (entityType == typeof(OrderItem))
            {
                return(container.OrderItems);
            }
            if (entityType == typeof(Order))
            {
                return(container.Orders);
            }
            if (entityType == typeof(ManyColumns))
            {
                return(container.ManyColumns);
            }
            if (entityType == typeof(ShippingAddress))
            {
                return(container.ShippingAddresses);
            }
            if (entityType == typeof(CustomerShippingAddress))
            {
                return(container.CustomerShippingAddress);
            }
            if (entityType == typeof(OrderItemsView))
            {
                return(container.OrderItemsView);
            }

            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.Category))
            {
                return(container.Categories);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.Customer))
            {
                return(container.Customers);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.OrderItem))
            {
                return(container.OrderItems);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.Order))
            {
                return(container.Orders);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.ManyColumns))
            {
                return(container.ManyColumns);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.ShippingAddress))
            {
                return(container.ShippingAddresses);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.CustomerShippingAddress))
            {
                return(container.CustomerShippingAddress);
            }
            if (entityType == typeof(ODataClient.OdataToEntity.Test.Model.OrderItemsView))
            {
                return(container.OrderItemsView);
            }

            throw new InvalidOperationException("unknown type " + entityType.Name);
        }