public static void RegisterOData(HttpConfiguration config) { // Query support var odataFilter = new EnableQueryAttribute { AllowedArithmeticOperators = AllowedArithmeticOperators.None, AllowedFunctions = AllowedFunctions.SubstringOf, AllowedLogicalOperators = AllowedLogicalOperators.And | AllowedLogicalOperators.Equal | AllowedLogicalOperators.Or, AllowedQueryOptions = AllowedQueryOptions.Expand | AllowedQueryOptions.Filter | AllowedQueryOptions.InlineCount | AllowedQueryOptions.OrderBy | AllowedQueryOptions.Skip | AllowedQueryOptions.Top, MaxExpansionDepth = 4, MaxNodeCount = 20, PageSize = 100 }; config.AddODataQueryFilter(odataFilter); // Add the CompositeKeyRoutingConvention var conventions = ODataRoutingConventions.CreateDefault(); conventions.Insert(0, new CompositeKeyRoutingConvention()); // Routes var edm = DbUtility.GetBackboneEdm(); config.Routes.MapODataServiceRoute( routeName: "ODataRoute", routePrefix: "odata/v1", model: edm, pathHandler: new DefaultODataPathHandler(), routingConventions: conventions, batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer)); // Without this line, it fails in 'batch save' operations }