/// <summary> /// Maps the OData service. /// </summary> /// <param name="config">The current HTTP configuration.</param> /// <param name="builder">The EDM model builder.</param> /// <param name="routeName">The name of the route (<see cref="DataObjectRoutingConventions.DefaultRouteName"/> be default).</param> /// <param name="routePrefix">The route prefix (<see cref="DataObjectRoutingConventions.DefaultRoutePrefix"/> be default).</param> /// <returns>OData service registration token.</returns> public static ManagementToken MapODataServiceDataObjectRoute( this HttpConfiguration config, IDataObjectEdmModelBuilder builder, string routeName = DataObjectRoutingConventions.DefaultRouteName, string routePrefix = DataObjectRoutingConventions.DefaultRoutePrefix) { Contract.Requires <ArgumentNullException>(config != null); Contract.Requires <ArgumentNullException>(builder != null); Contract.Requires <ArgumentNullException>(routeName != null); Contract.Requires <ArgumentException>(routeName != string.Empty); Contract.Requires <ArgumentNullException>(routePrefix != null); Contract.Requires <ArgumentException>(routePrefix != string.Empty); // Model. var model = builder.Build(); // Routing. var pathHandler = new ExtendedODataPathHandler(); var routingConventions = DataObjectRoutingConventions.CreateDefault(); var route = config.MapODataServiceRoute(routeName, routePrefix, model, pathHandler, routingConventions); // Controllers. var registeredActivator = (IHttpControllerActivator)config.Services.GetService(typeof(IHttpControllerActivator)); var fallbackActivator = registeredActivator ?? new DefaultHttpControllerActivator(); config.Services.Replace(typeof(IHttpControllerActivator), new DataObjectControllerActivator(fallbackActivator)); // Formatters. var customODataSerializerProvider = new CustomODataSerializerProvider(); var extendedODataDeserializerProvider = new ExtendedODataDeserializerProvider(); var odataFormatters = ODataMediaTypeFormatters.Create(customODataSerializerProvider, extendedODataDeserializerProvider); config.Formatters.InsertRange(0, odataFormatters); config.Properties[typeof(CustomODataSerializerProvider)] = customODataSerializerProvider; // Token. var token = new ManagementToken(route, model); config.SetODataServiceToken(token); // Handlers. if (config.MessageHandlers.FirstOrDefault(h => h is PostPatchHandler) == null) { config.MessageHandlers.Add(new PostPatchHandler()); } return(token); }
public BaseODataServiceIntegratedTest( string stageCasePath = @"РТЦ Тестирование и документирование\Модели для юнит-тестов\Flexberry ORM\NewPlatform.Flexberry.ORM.ODataService.Tests\", bool useNamespaceInEntitySetName = false, bool useGisDataService = false) : base("ODataDB", useGisDataService) { DataObjectsAssembliesNames = new[] { typeof(Car).Assembly, //typeof(Agent).Assembly }; UseNamespaceInEntitySetName = useNamespaceInEntitySetName; var builder = new DefaultDataObjectEdmModelBuilder(DataObjectsAssembliesNames, UseNamespaceInEntitySetName); //builder.PropertyFilter = PropertyFilter; _builder = builder; }
/// <summary> /// Initializes a new instance of the <see cref="PerRequestUpdateEdmModelHandler"/> class. /// </summary> /// <param name="token">The OData Service management token.</param> /// <param name="modelBuilder"> /// The model builder for updating model. /// Each request EDM model associated with <paramref name="token"/> will be updated. /// </param> public PerRequestUpdateEdmModelHandler(ManagementToken token, IDataObjectEdmModelBuilder modelBuilder) { Contract.Requires <ArgumentNullException>(token != null); Contract.Requires <ArgumentNullException>(modelBuilder != null); // In current Microsoft implementation of OData for WebAPI, EDM model is stored // in ODataPathRouteConstraint, but doesn't have public setter. // In order to rebuild EDM model for different requests (e.g. authorized users), // this handler uses reflection for private setter calling. _edmModelProperty = typeof(ODataPathRouteConstraint).GetProperty("EdmModel"); if (_edmModelProperty == null) { throw new InvalidOperationException("Current OData API cannot be used for editing EDM model."); } _token = token; _modelBuilder = modelBuilder; }
public DataObjectEdmModel(DataObjectEdmMetadata metadata, IDataObjectEdmModelBuilder edmModelBuilder = null) { Contract.Requires <ArgumentNullException>(metadata != null); EdmModelBuilder = edmModelBuilder; var container = UnityFactory.GetContainer(); if (container != null) { if (container.IsRegistered <IExportService>("Export")) { ExportService = container.Resolve <IExportService>("Export"); } if (container.IsRegistered <IExportService>()) { ExportService = container.Resolve <IExportService>(); } if (container.IsRegistered <IODataExportService>("Export")) { ODataExportService = container.Resolve <IODataExportService>("Export"); } if (container.IsRegistered <IODataExportService>()) { ODataExportService = container.Resolve <IODataExportService>(); } } _metadata = metadata; BuildTypeHierarchy(); BuildEdmEntityTypes(); BuildEntitySets(); RegisterMasters(); RegisterDetails(); RegisterGeoIntersectsFunction(); RegisterGeomIntersectsFunction(); }