예제 #1
0
 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('.'));
 }
예제 #2
0
        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);
        }