コード例 #1
0
        public void CanCallIgnore_MultipleTimes_WithDuplicates()
        {
            var builder = new ODataConventionModelBuilder();
            builder.Ignore<object>();
            builder.Ignore<object>();
            builder.Ignore(typeof(object), typeof(object), typeof(object));

            Assert.True(builder.IsIgnoredType(typeof(object)));
        }
コード例 #2
0
        private IEdmModel GetModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <SelectExpandTestCustomer>("SelectExpandTestCustomers");
            builder.EntitySet <SelectExpandTestOrder>("SelectExpandTestOrders");
            builder.Ignore <SelectExpandTestSpecialCustomer>();
            builder.Ignore <SelectExpandTestSpecialOrder>();
            return(builder.GetEdmModel());
        }
コード例 #3
0
        private IEdmModel GetModelWithCustomerAlias()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder {
                ModelAliasingEnabled = true
            };

            builder.EntitySet <SelectExpandTestCustomerWithAlias>("SelectExpandTestCustomersAlias");
            builder.EntitySet <SelectExpandTestOrderWithAlias>("SelectExpandTestOrdersAlias");
            builder.Ignore <SelectExpandTestSpecialCustomerWithAlias>();
            builder.Ignore <SelectExpandTestSpecialOrderWithAlias>();
            return(builder.GetEdmModel());
        }
コード例 #4
0
        public void IgnoreOfT_Should_AddToListOfIgnoredTypes()
        {
            var builder = new ODataConventionModelBuilder();
            builder.Ignore<object>();

            Assert.True(builder.IsIgnoredType(typeof(object)));
        }
    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureWebApi(IAppBuilder app)
    {
      var config = new HttpConfiguration();

      // Web API routes
      config.MapHttpAttributeRoutes(); //NB Must come before OData route mapping
      config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional });

      // OData:  Create the OData model.  Here, we're using the convention model builder that will use OData
      // convention defaults for model creation and routing.
      ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
      
      // All entity properties should be in lower camel case
      builder.EnableLowerCamelCase();

      // Because PersonSearchHit inherits from SearchHit, we'll ignore it.
      // This gets around the convention builder's decision to create an entity out of the SearchHit object.
      builder.Ignore<PersonSearchHit>();

      // Create two entity sets:
      // One for search features and one that will retrieve a given person.
      builder.EntitySet<IndexSearch>("Search");
      builder.EntitySet<Person>("People");
      
      // OData model registration and route creation
      config.MapODataServiceRoute("ODataRoute", null, builder.GetEdmModel());

      // Set up the bearer token that will be required to do OData calls.
      WebApiConfigBearerToken.Configure(config);

      app.UseWebApi(config);
    }
コード例 #6
0
        public void ModelBuilder_Ignores_IgnoredTypeAndTheirDerivedTypes()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <Vehicle>("Vehicles");
            builder.Ignore <Motorcycle>();

            IEdmModel model = builder.GetEdmModel();

            // ignore motorcycle, sportbike and MotorcycleManufacturer
            Assert.Equal(_totalExpectedSchemaTypesForVehiclesModel - 3, model.SchemaElements.Count());
            Assert.Equal(1, model.EntityContainers().Single().EntitySets().Count());
            model.AssertHasEntitySet("Vehicles", typeof(Vehicle));

            var vehicle = model.AssertHasEntityType(typeof(Vehicle));

            Assert.Equal(2, vehicle.Key().Count());
            Assert.Equal(3, vehicle.Properties().Count());
            vehicle.AssertHasKey(model, "Model", EdmPrimitiveTypeKind.Int32);
            vehicle.AssertHasKey(model, "Name", EdmPrimitiveTypeKind.String);
            vehicle.AssertHasPrimitiveProperty(model, "WheelCount", EdmPrimitiveTypeKind.Int32, isNullable: false);

            var car = model.AssertHasEntityType(typeof(Car));

            Assert.Equal(vehicle, car.BaseEntityType());
            Assert.Equal(2, car.Key().Count());
            Assert.Equal(5, car.Properties().Count());
            car.AssertHasPrimitiveProperty(model, "SeatingCapacity", EdmPrimitiveTypeKind.Int32, isNullable: false);
            car.AssertHasNavigationProperty(model, "Manufacturer", typeof(CarManufacturer), isNullable: true, multiplicity: EdmMultiplicity.ZeroOrOne);
        }
コード例 #7
0
        public void IgnoreOfT_Should_AddToListOfIgnoredTypes()
        {
            var builder = new ODataConventionModelBuilder();

            builder.Ignore <object>();

            Assert.True(builder.IsIgnoredType(typeof(object)));
        }
コード例 #8
0
        private IEdmModel GetModel()
        {
            ODataConventionModelBuilder builder = ODataConventionModelBuilderFactory.Create();
            var set = builder.EntitySet <SelectExpandTestCustomer>("SelectExpandTestCustomers");

            builder.EntitySet <SelectExpandTestOrder>("SelectExpandTestOrders");
            var set2 = builder.EntitySet <SelectExpandTestCustomerWithCustom>("SelectExpandTestCustomerWithCustoms");

            builder.Ignore <SelectExpandTestSpecialCustomer>();
            builder.Ignore <SelectExpandTestSpecialOrder>();

            set.EntityType.Function("GetBestOrders").ReturnsCollectionFromEntitySet <SelectExpandTestOrder>("SelectExpandTestOrders");
            set2.EntityType.Function("GetInstanceBestOrders").ReturnsCollectionFromEntitySet <SelectExpandTestOrder>("SelectExpandTestOrders");
            set2.EntityType.Function("GetInt").Returns <int>().Parameter <int>("p");
            set2.EntityType.Function("ConvertEnum").Returns <int>().Parameter <TestEnum>("p");
            builder.EnumType <TestEnum>();

            var model = builder.GetEdmModel();

            var entityType        = model.EntityContainer.EntitySets().First(e => e.Name == "SelectExpandTestCustomerWithCustoms").EntityType() as EdmEntityType;
            var containerProperty = typeof(SelectExpandTestCustomerWithCustom).GetProperty(nameof(SelectExpandTestCustomerWithCustom.Custom));
            var clrProperty       = containerProperty.PropertyType.GetProperty(nameof(CustomFields.TestField));


            var edmProperty = entityType.AddStructuralProperty("TestField", EdmPrimitiveTypeKind.String, true);

            model.SetAnnotationValue(edmProperty, new ClrPropertyInfoAnnotation(clrProperty)
            {
                PropertiesPath = new List <PropertyInfo>()
                {
                    containerProperty
                }
            });

            var modelBound = model.GetAnnotationValue <ModelBoundQuerySettings>(entityType) ?? new ModelBoundQuerySettings();

            modelBound.DefaultSelectType = SelectExpandType.Automatic;
            modelBound.MaxTop            = null; // Ensure that system wide settings are respected
            model.SetAnnotationValue(entityType, modelBound);

            BoundFunctions.RegisterFunctions(model.SchemaElements.OfType <EdmEnumType>().First(e => e.Name == "TestEnum").ToEdmTypeReference(false));

            return(model);
        }
コード例 #9
0
        private static IEdmModel GetSampleModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.ComplexType<Person>();

            // Employee is derived from Person. Employee has a property named manager it's Employee type.
            // It's not allowed to build inheritance complex type because a recursive loop of complex types is not allowed.
            builder.Ignore<Employee>();
            return builder.GetEdmModel();
        }
コード例 #10
0
        private static IEdmModel GetSampleModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.ComplexType <Person>();

            // Employee is derived from Person. Employee has a property named manager it's Employee type.
            // It's not allowed to build inheritance complex type because a recursive loop of complex types is not allowed.
            builder.Ignore <Employee>();
            return(builder.GetEdmModel());
        }
コード例 #11
0
        private IEdmModel GetModelWithAutoSelect()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <SelectExpandTestCustomer>("SelectExpandTestCustomers");
            builder.EntitySet <SelectExpandTestOrder>("SelectExpandTestOrders");
            builder.Ignore <SelectExpandTestSpecialCustomer>();
            builder.Ignore <SelectExpandTestSpecialOrder>();
            var             model            = builder.GetEdmModel();
            Action <string> enableAutoSelect = (string entityName) =>
            {
                var entityType = model.EntityContainer.FindEntitySet(entityName).EntityType();
                var modelBound = new ModelBoundQuerySettings()
                {
                    DefaultSelectType = SelectExpandType.Automatic,
                    MaxTop            = null // Ensure that system wide settings are respected
                };
                model.SetAnnotationValue(entityType, modelBound);
            };

            enableAutoSelect("SelectExpandTestCustomers");
            enableAutoSelect("SelectExpandTestOrders");
            return(model);
        }
コード例 #12
0
        public void ModelBuilder_Can_Add_DerivedTypeOfAnIgnoredType()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Vehicle>("Vehicles");
            builder.Ignore<Motorcycle>();
            builder.Entity<SportBike>();

            IEdmModel model = builder.GetEdmModel();

            Assert.Equal(_totalExpectedSchemaTypesForVehiclesModel - 1, model.SchemaElements.Count());
            Assert.Equal(1, model.EntityContainers().Single().EntitySets().Count());
            model.AssertHasEntitySet("Vehicles", typeof(Vehicle));

            var vehicle = model.AssertHasEntityType(typeof(Vehicle));
            Assert.Equal(2, vehicle.Key().Count());
            Assert.Equal(3, vehicle.Properties().Count());
            vehicle.AssertHasKey(model, "Model", EdmPrimitiveTypeKind.Int32);
            vehicle.AssertHasKey(model, "Name", EdmPrimitiveTypeKind.String);
            vehicle.AssertHasPrimitiveProperty(model, "WheelCount", EdmPrimitiveTypeKind.Int32, isNullable: false);

            var car = model.AssertHasEntityType(typeof(Car));
            Assert.Equal(vehicle, car.BaseEntityType());
            Assert.Equal(2, car.Key().Count());
            Assert.Equal(5, car.Properties().Count());
            car.AssertHasPrimitiveProperty(model, "SeatingCapacity", EdmPrimitiveTypeKind.Int32, isNullable: false);
            car.AssertHasNavigationProperty(model, "Manufacturer", typeof(CarManufacturer), isNullable: true, multiplicity: EdmMultiplicity.ZeroOrOne);

            var sportbike = model.AssertHasEntityType(typeof(SportBike));
            Assert.Equal(vehicle, sportbike.BaseEntityType());
            Assert.Equal(2, sportbike.Key().Count());
            Assert.Equal(5, sportbike.Properties().Count());
            sportbike.AssertHasNavigationProperty(model, "Manufacturer", typeof(MotorcycleManufacturer), isNullable: true, multiplicity: EdmMultiplicity.ZeroOrOne);
        }
コード例 #13
0
 private IEdmModel GetModelWithCustomerAlias()
 {
     ODataConventionModelBuilder builder = new ODataConventionModelBuilder { ModelAliasingEnabled = true };
     builder.EntitySet<SelectExpandTestCustomerWithAlias>("SelectExpandTestCustomersAlias");
     builder.EntitySet<SelectExpandTestOrderWithAlias>("SelectExpandTestOrdersAlias");
     builder.Ignore<SelectExpandTestSpecialCustomerWithAlias>();
     builder.Ignore<SelectExpandTestSpecialOrderWithAlias>();
     return builder.GetEdmModel();
 }
コード例 #14
0
 private IEdmModel GetModel()
 {
     ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
     builder.EntitySet<SelectExpandTestCustomer>("SelectExpandTestCustomers");
     builder.EntitySet<SelectExpandTestOrder>("SelectExpandTestOrders");
     builder.Ignore<SelectExpandTestSpecialCustomer>();
     builder.Ignore<SelectExpandTestSpecialOrder>();
     return builder.GetEdmModel();
 }