private static void BuildDefaultConfiguration(ODataServiceSettings settings) { settings.Services.SchemaReader = s => new SchemaViewsReader(s.ConnectionString, s.Schema); settings.Services.EdmModelBuilder = s => new EdmObjectHierarchyModelBuilder(s.Services.SchemaReader(s)); settings.Services.DataService = s => new DataServiceV2(s.ConnectionString, new SqlQueryBuilderWithObjectHierarchy('.'), new RowsToEdmObjectHierarchyResultTransformer('.')); }
public static void RegisterDynamicOData(this HttpConfiguration config, Action <ODataServiceSettings> configureSettings) { var routeName = $"ODataService_{Guid.NewGuid().ToString("N")}"; ODataServiceSettings settings = new ODataServiceSettings(); BuildDefaultConfiguration(settings); configureSettings(settings); EdmModel edmModel = settings.Services.EdmModelBuilder(settings).GetModel(); IDataService dataService = settings.Services.DataService(settings); var routingConventions = ODataRoutingConventions.CreateDefault(); routingConventions.Insert(0, new DynamicRoutingConvention()); var oDataRoute = new ODataRoute( settings.RoutePrefix, new CustomODataPathRouteConstraint( new CustomODataPathHandler(), _ => edmModel, routeName, routingConventions, dataService)); config.Services.Insert(typeof(ModelBinderProvider), 0, new SimpleModelBinderProvider(typeof(ODataQueryOptions), new ODataQueryOptionsBinder())); config.Services.Insert(typeof(ModelBinderProvider), 0, new SimpleModelBinderProvider(typeof(HttpRequestMessageProperties), new ODataRequestPropertiesBinder())); config.Services.Insert(typeof(ModelBinderProvider), 0, new SimpleModelBinderProvider(typeof(IDataService), new DataServiceBinder())); config.Routes.Add(routeName, oDataRoute); }