Example #1
14
        private IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = ODataConventionModelBuilderFactory.Create();

            builder.EntityType <Customer>().Namespace = "NS";
            builder.ComplexType <Address>().Namespace = "NS";

            FunctionConfiguration getEnum = builder.Function("GetEnum");

            getEnum.Parameter <SimpleEnum>("simpleEnum");
            getEnum.Returns <SimpleEnum>();

            FunctionConfiguration getFlagsEnum = builder.Function("GetFlagsEnum");

            getFlagsEnum.Parameter <FlagsEnum>("flagsEnum");
            getFlagsEnum.Returns <FlagsEnum>();

            FunctionConfiguration function = builder.Function("GetNullableFlagsEnum").Returns <bool>();

            function.Parameter <FlagsEnum?>("flagsEnum");

            builder.Function("GetAddress").Returns <bool>().Parameter <Address>("address");
            builder.Function("GetCustomer").Returns <bool>().Parameter <Customer>("customer");
            return(builder.GetEdmModel());
        }
Example #2
0
        public static IEdmModel Build()
        {
            // create OData builder instance
            var builder = new ODataConventionModelBuilder();

            // map the entityset which is the type returned from the endpoint onto the OData pipeline
            // the string parameter is the name of the controller
            // which supplies the data of type ReaderModel in this case
            builder.EntitySet <ReaderModel>("ODataReaders").EntityType.HasKey(x => x.Id);

            // configure a function onto the builder, AllReaders
            // which is same as the name provided in the ODataRoute
            var fnAllReaders = builder.Function("AllReaders");

            // define what type the function returns; here it is of type ReaderModel
            fnAllReaders.ReturnsCollectionFromEntitySet <ReaderModel>("ODataReaders");

            // configure a function onto the builder, ReadersById
            // which is same as the name provided in the ODataRoute
            var fnReadersById = builder.Function("ReadersById");

            // since this function takes a parameter of type id,
            // define what type the parameter accepts and
            // the identifier same as the one mentioned within the route
            fnReadersById.Parameter <int>("id");

            // define what type the function returns; here it is of type ReaderModel
            fnReadersById.ReturnsCollectionFromEntitySet <ReaderModel>("ODataReaders");

            // return the fully configured builder model
            // on which the OData library shall be built
            return(builder.GetEdmModel());
        }
Example #3
0
        private static IEdmModel getEdmModel()
        {
            ODataConventionModelBuilder      modelBuilder    = new ODataConventionModelBuilder();
            EntitySetConfiguration <Person>  peopleEntitySet = modelBuilder.EntitySet <Person>("People");
            EntityTypeConfiguration <Person> personType      = peopleEntitySet.EntityType;

            personType.Ignore(p => p.CreatedTime);
            personType.Ignore(p => p.LastModifiedTime);

            EntitySetConfiguration <Account>  accountEntitySet = modelBuilder.EntitySet <Account>("Accounts");
            EntityTypeConfiguration <Account> accountType      = accountEntitySet.EntityType;

            accountType.Ignore(a => a.LastModifyTime);
            accountType.Ignore(a => a.CreateTime);

            FunctionConfiguration getPersonAndDescendants = modelBuilder.Function("GetPersonAndDescendants");

            getPersonAndDescendants.ReturnsFromEntitySet <Person>("People");
            getPersonAndDescendants.Parameter <long>("Id");          // The id of the root person.
            getPersonAndDescendants.Parameter <long>("TotalLevels"); // How many levels will be loaded and the root person is included.
            getPersonAndDescendants.IsComposable = true;

            FunctionConfiguration getPersonAndAncestors = modelBuilder.Function("GetPersonAndAncestors");

            getPersonAndAncestors.ReturnsCollectionFromEntitySet <Person>("People");
            getPersonAndAncestors.Parameter <long>("Id");          // The id of the root person.
            getPersonAndAncestors.Parameter <long>("TotalLevels"); // How many levels will be loaded and the root person is included.
            getPersonAndAncestors.IsComposable = true;

            modelBuilder.Namespace = typeof(Person).Namespace;
            return(modelBuilder.GetEdmModel());
        }
Example #4
0
        public static IEdmModel GetEdmModelV2()
        {
            var builder = new ODataConventionModelBuilder();

            builder.EntitySet <Order>("Orders");

            builder.Singleton <Order>("VipOrder");

            var functionWithComplexTypeParameter = builder.EntityType <Order>().Function("CanMoveToAddress").Returns <bool>();

            functionWithComplexTypeParameter.Parameter <Address>("address");

            // Function 1
            var function = builder.Function("RateByOrder");

            function.Parameter <int>("order");
            function.Returns <int>();

            // Function 2
            function = builder.Function("CalcByOrder");
            function.Parameter <string>("name");
            function.Parameter <int>("order");
            function.Returns <int>();

            return(builder.GetEdmModel());
        }
        private static IEdmModel BuildEdmModel()
        {
            var builder = new ODataConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            builder.ComplexType <Address>();

            var function = builder.Function("UnboundFunction").Returns <string>();

            function.Parameter <int>("p1");
            function.Parameter <string>("p2");
            function.Parameter <Address>("location");

            function = builder.Function("ConventionUnboundFunction").Returns <string>();
            function.Parameter <int>("p1");
            function.Parameter <string>("p2");
            function.Parameter <Address>("location");

            function = builder.Function("RetrieveCustomersByFilter").ReturnsCollectionFromEntitySet <Customer>("Customers");
            function.Parameter <string>("name");
            function.Parameter <string>("lastName");
            function.Parameter <CustomerType>("customerType");

            return(builder.GetEdmModel());
        }
        public static IEdmModel GetEdmModelV2()
        {
            var builder = new ODataConventionModelBuilder();

            builder.EntitySet <Order>("Orders");

            builder.Singleton <Order>("VipOrder");
            builder.Singleton <Category>("Categories");

            var functionWithComplexTypeParameter = builder.EntityType <Order>().Function("CanMoveToAddress").Returns <bool>();

            functionWithComplexTypeParameter.Parameter <Address>("address");

            // function with optional parameters
            var functionWithOptional = builder.EntityType <Order>().Function("GetWholeSalary").ReturnsCollectionFromEntitySet <Order>("Orders");

            functionWithOptional.Parameter <int>("minSalary");
            functionWithOptional.Parameter <int>("maxSalary").Optional();
            functionWithOptional.Parameter <int>("aveSalary").HasDefaultValue("129");

            // Function 1
            var function = builder.Function("RateByOrder");

            function.Parameter <int>("order");
            function.Returns <int>();

            // Function 2
            function = builder.Function("CalcByOrder");
            function.Parameter <string>("name");
            function.Parameter <int>("order");
            function.Returns <int>();

            return(builder.GetEdmModel());
        }
Example #7
0
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API Cors
            config.EnableCors();

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );

            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <account>("accounts");
            builder.EntitySet <customer>("customers");
            builder.EntitySet <employee>("employees");
            builder.EntitySet <supplier>("suppliers");
            builder.EntitySet <bank>("banks");
            builder.EntitySet <loan>("loans");
            builder.EntitySet <payment>("payments");
            builder.EntitySet <product>("products");
            builder.EntitySet <sale>("sales");
            builder.EntitySet <transact>("transacts");

            // Configure the OData path for custom functions

            // For only 1 parameter, we can omit the configuration into one line for this GetTables functions
            builder.Function("GetTables").Returns <List <string> >().Parameter <string>("Database");

            // Configuration for GetAttributes functions with two parameters : Database and table
            var getAttributeFunction = builder.Function("GetAttributes");

            getAttributeFunction.Parameter <string>("Database");
            getAttributeFunction.Parameter <string>("Table");
            getAttributeFunction.Returns <List <string> >();

            // Configuration for GetReferencedTables functions with two parameters : Database and table
            var getReferencedTablesFunction = builder.Function("GetReferencedTables");

            getReferencedTablesFunction.Parameter <string>("Database");
            getReferencedTablesFunction.Parameter <string>("Table");
            getReferencedTablesFunction.Returns <List <string> >();

            // Configuration for GetTablesReferencingTable functions with two parameters : Database and table
            var getTablesReferencingTableFunction = builder.Function("GetTablesReferencingTable");

            getTablesReferencingTableFunction.Parameter <string>("Database");
            getTablesReferencingTableFunction.Parameter <string>("Table");
            getTablesReferencingTableFunction.Returns <List <string> >();

            config.MapODataServiceRoute("odata", "Service", builder.GetEdmModel());
        }
        private IEdmModel GetEdmModel(HttpConfiguration configuration)
        {
            ODataConventionModelBuilder builder = ODataModelBuilderMocks.GetModelBuilderMock <ODataConventionModelBuilder>(configuration);

            builder.EntitySet <ConventionCustomer>("ConventionCustomers");
            builder.EntitySet <ConventionOrder>("ConventionOrders");
            builder.ComplexType <ConventionPerson>();
            builder.EntityType <ConventionCustomer>().ComplexProperty <ConventionAddress>(c => c.Address);

            // Top level action import
            ActionConfiguration createConventionCustomerById = builder.Action("CreateConventionCustomerById");

            createConventionCustomerById.Parameter <int>("ID");
            createConventionCustomerById.ReturnsFromEntitySet <ConventionCustomer>("ConventionCustomers");

            // Top level action import without parameter and with a collection of primitive return type
            ActionConfiguration topCollectionPrimitiveAction = builder.Action("CreateCollectionMessages");

            topCollectionPrimitiveAction.ReturnsCollection <string>();

            // Top level function import
            FunctionConfiguration getAllCustomers = builder.Function("GetAllConventionCustomers");

            getAllCustomers.ReturnsCollectionFromEntitySet <ConventionCustomer>("ConventionCustomers");

            // Top level function import with one parameter
            FunctionConfiguration getCustomersById = builder.Function("GetConventionCustomerById");

            getCustomersById.IsComposable = true;
            getCustomersById.Parameter <int>("CustomerId");
            getCustomersById.ReturnsFromEntitySet <ConventionCustomer>("ConventionCustomers");

            // Top level function import with two parameters
            FunctionConfiguration getOrder = builder.Function("GetConventionOrderByCustomerIdAndOrderName");

            getOrder.Parameter <int>("CustomerId");
            getOrder.Parameter <string>("OrderName");
            getOrder.ReturnsFromEntitySet <ConventionOrder>("ConventionOrders");

            // Top level function import with complex parameter
            FunctionConfiguration complexFunction = builder.Function("ComplexFunction");

            complexFunction.Parameter <ConventionAddress>("address");
            complexFunction.Returns <string>();

            // Top level function import with entity parameter
            FunctionConfiguration entityFunction = builder.Function("EntityFunction");

            entityFunction.Parameter <ConventionOrder>("order");
            entityFunction.Returns <string>();

            return(builder.GetEdmModel());
        }
        public static IEdmModel GetEdmModel()
        {
            var builder          = new ODataConventionModelBuilder();
            var entityCollection = builder.EntitySet <DollarCountEntity>("DollarCountEntities").EntityType.Collection;

            // Add unbound functions that return collection.
            FunctionConfiguration function = builder.Function("UnboundFunctionReturnsPrimitveCollection");

            function.IsComposable = true;
            function.ReturnsCollection <int>();

            function = builder.Function("UnboundFunctionReturnsEnumCollection");
            function.IsComposable = true;
            function.ReturnsCollection <Color>();

            function = builder.Function("UnboundFunctionReturnsDateTimeOffsetCollection");
            function.IsComposable = true;
            function.ReturnsCollection <DateTimeOffset>();

            function = builder.Function("UnboundFunctionReturnsComplexCollection");
            function.IsComposable = true;
            function.ReturnsCollection <DollarCountComplex>();

            function = builder.Function("UnboundFunctionReturnsEntityCollection");
            function.IsComposable = true;
            function.ReturnsCollectionFromEntitySet <DollarCountEntity>("DollarCountEntities");

            // Add bound functions that return collection.
            function = entityCollection.Function("BoundFunctionReturnsPrimitveCollection");
            function.IsComposable = true;
            function.ReturnsCollection <DateTimeOffset>();

            function = entityCollection.Function("BoundFunctionReturnsEnumCollection");
            function.IsComposable = true;
            function.ReturnsCollection <Color>();

            function = entityCollection.Function("BoundFunctionReturnsDateTimeOffsetCollection");
            function.IsComposable = true;
            function.ReturnsCollection <DateTimeOffset>();

            function = entityCollection.Function("BoundFunctionReturnsComplexCollection");
            function.IsComposable = true;
            function.ReturnsCollection <DollarCountComplex>();

            function = entityCollection.Function("BoundFunctionReturnsEntityCollection");
            function.IsComposable = true;
            function.ReturnsCollectionFromEntitySet <DollarCountEntity>("DollarCountEntities");

            return(builder.GetEdmModel());
        }
Example #10
0
        public void Configuration(IAppBuilder builder)
        {
            var odataBuilder = new ODataConventionModelBuilder();

            odataBuilder.EntitySet <Player>("Players");
            var player = odataBuilder.EntityType <Player>();

            //collection function
            player.Collection.Function("TopPpg").ReturnsCollection <Player>();

            //entity function
            player.Function("PercentageOfAllGoals").Returns <double>();

            //service function
            var serviceFunc = odataBuilder.Function("TotalTeamPoints");

            serviceFunc.Returns <int>().Parameter <string>("team");
            serviceFunc.IncludeInServiceDocument = true;

            var edm = odataBuilder.GetEdmModel();

            var config = new HttpConfiguration();

            config.MapODataServiceRoute("Default OData", "odata", edm);
            builder.UseWebApi(config);
        }
Example #11
0
        private IEdmModel GetEdmModel()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            EntitySetConfiguration <Employee>         employees         = builder.EntitySet <Employee>("Employees");
            EntitySetConfiguration <Department>       departments       = builder.EntitySet <Department>("Departments");
            EntitySetConfiguration <Party>            parties           = builder.EntitySet <Party>("Parties");
            EntitySetConfiguration <ObjectPermission> objectPermissions = builder.EntitySet <ObjectPermission>("ObjectPermissions");
            EntitySetConfiguration <MemberPermission> memberPermissions = builder.EntitySet <MemberPermission>("MemberPermissions");
            EntitySetConfiguration <TypePermission>   typePermissions   = builder.EntitySet <TypePermission>("TypePermissions");

            employees.EntityType.HasKey(t => t.Oid);
            departments.EntityType.HasKey(t => t.Oid);
            parties.EntityType.HasKey(t => t.Oid);

            FunctionConfiguration login = builder.Function("Login");

            login.Returns <int>();
            login.Parameter <string>("userName");
            login.Parameter <string>("password");

            builder.Action("Logout");

            ActionConfiguration getPermissions = builder.Action("GetPermissions");

            getPermissions.Parameter <string>("typeName");
            getPermissions.CollectionParameter <string>("keys");

            ActionConfiguration getTypePermissions = builder.Action("GetTypePermissions");

            getTypePermissions.Parameter <string>("typeName");
            getTypePermissions.ReturnsFromEntitySet <TypePermission>("TypePermissions");
            return(builder.GetEdmModel());
        }
Example #12
0
        public static IEdmModel GetEdmModel()
        {
            var builder = new ODataConventionModelBuilder();

            builder.EntitySet <Resources>("Resources");
            builder.EntitySet <ResourceSkills>("ResourceSkills");
            builder.EntitySet <Skill>("Skills");
            builder.EntitySet <Roles>("Roles");
            builder.EntitySet <ClientLocation>("ClientLocations");
            builder.EntitySet <ClientLocation>("ClientLocations");
            builder.EntitySet <IntacctLocation>("IntacctLocations");
            builder.EntitySet <EmployeeCertification>("EmployeeCertifications");
            builder.EntitySet <SearchAnalytics>("SearchAnalytics");
            builder.EntitySet <PageAnalytics>("PageAnalytics");
            builder.EntitySet <Department>("Departments");
            builder.EntitySet <ProjectMaster>("ProjectMasters");
            builder.EntitySet <ResourceAssignments>("ResourceAssignments");
            builder.EntitySet <Certifications>("Certifications");
            builder.EntitySet <Resources>(nameof(Resources));
            {
                var function = builder.Function("GetResourceDetails");
                function.Parameter <string>("skillName");
                function.Parameter <string>("employeeName");
                //function.Parameter<string>("availability");
                //function.Parameter<string>("role");
                //function.Parameter<string>("location");
                function.Returns <string>();
            }

            return(builder.GetEdmModel());
        }
Example #13
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <ApplicantModel>("Applicants").EntityType.Filter(QueryOptionSetting.Allowed);
            var function = builder.Function("getApplicants");

            function.Parameter <string>("searchText");
            function.ReturnsCollectionFromEntitySet <ApplicantModel>("Applicants");
            //var model = builder.GetEdmModel();
            app.UseCors(options => options
                        .AllowAnyHeader()
                        .AllowAnyMethod()
                        .AllowAnyOrigin()
                        .AllowCredentials()

                        );

            app.UseMvc(b =>
            {
                b.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
                b.EnableDependencyInjection();
                b.Select()
                .Expand()
                .Filter()
                .OrderBy(QueryOptionSetting.Allowed)
                .MaxTop(2000)
                .Count();
            });
        }
Example #14
0
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes

            /*
             * config.MapHttpAttributeRoutes();
             *
             * config.Routes.MapHttpRoute(
             *  name: "DefaultApi",
             *  routeTemplate: "api/{controller}/{id}",
             *  defaults: new { id = RouteParameter.Optional }
             * );
             */

            ODataModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <Game>("Games");
            builder.EntitySet <Store>("Stores");

            config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);

            builder.Function("Dalajlama").Returns <double>().Parameter <int>("Postal");

            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: null,
                model: builder.GetEdmModel());
        }
Example #15
0
        IEdmModel GetEdmModel(ODataConventionModelBuilder builder)
        {
            builder.EntitySet <Album>("Albums");
            builder.EntitySet <Artist>("Artists");
            builder.EntitySet <Customer>("Customers");
            builder.EntitySet <Employee>("Employees");
            builder.EntitySet <Genre>("Genres");
            builder.EntitySet <Invoice>("Invoices");
            builder.EntitySet <InvoiceLine>("InvoiceLines");
            builder.EntitySet <MediaType>("MediaTypes");
            builder.EntitySet <Playlist>("Playlists");
            builder.EntitySet <Track>("Tracks");

            builder.EntityType <Track>()
            .Action("Rate")
            .Parameter <int>("Rating");

            builder.EntityType <Track>()
            .Collection
            .Function("MostExpensive")
            .Returns <double>();

            builder.Function("GetSalesTaxRate")
            .Returns <double>()
            .Parameter <int>("PostalCode");

            return(builder.GetEdmModel());
        }
Example #16
0
        public static void Register(HttpConfiguration config)
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();

            builder.Namespace = "ProductService";

            builder.EntitySet <Product>("Products");
            builder.EntitySet <Supplier>("Suppliers");

            builder.EntityType <Product>()
            .Action("Rate")
            .Parameter <int>("Rating");

            builder.EntityType <Product>()
            .Collection
            .Function("MostExpensive")
            .Returns <double>();

            builder.Function("GetSalesTaxRate")
            .Returns <double>()
            .Parameter <int>("PostalCode");

            config.Count().Filter().OrderBy().Expand().Select();

            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: null,
                model: builder.GetEdmModel());

            config.Filters.Add(new BasicAuthenticationAttribute());
        }
Example #17
0
        private static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <Bank>("Bank");
            builder.EntitySet <Currency>("Coin");
            builder.EntitySet <Deposit>("Deposit");
            //builder.EntitySet<DepositWalletCurrency>("DepositWalletCurrency");
            builder.EntitySet <EntitieBase>("EntitieBase");
            builder.EntitySet <ImgUser>("ImgUser");
            builder.EntitySet <User>("User");
            builder.EntitySet <Wallet>("Wallet");
            builder.EntitySet <Transfer>("Transfer");

            var function = builder.Function("TotalCurrency");

            function.Parameter <int>("userId");
            function.Parameter <int>("currencyId");

            function.Returns <double>();



            return(builder.GetEdmModel());;
        }
        private static void GetProdutoPeloCodigo(ODataConventionModelBuilder builder)
        {
            var FunctionGetProdutoPeloCodigo = builder.Function("GetProdutoPeloCodigo");

            FunctionGetProdutoPeloCodigo.ReturnsFromEntitySet <Produto>("Produtos");
            FunctionGetProdutoPeloCodigo.Parameter <string>("Codigo");
        }
        private static void ExisteCodigoProduto(ODataConventionModelBuilder builder)
        {
            var FunctionExisteCodigoProduto = builder.Function("ExisteCodigoProduto");

            FunctionExisteCodigoProduto.Returns <bool>();
            FunctionExisteCodigoProduto.Parameter <string>("Codigo");
        }
Example #20
0
        public static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder        builder  = new ODataConventionModelBuilder();
            EntityTypeConfiguration <Customer> customer = builder.EntitySet <Customer>("Customers").EntityType;
            EntityTypeConfiguration <Order>    order    = builder.EntitySet <Order>("Orders").EntityType;

            // Add unbound function for get special customer.
            FunctionConfiguration getCustomersWithNameContaining = builder.Function("GetCustomersWithNameContaining");

            getCustomersWithNameContaining.Parameter <string>("ContainedString");
            getCustomersWithNameContaining.ReturnsCollectionFromEntitySet <Customer>("Customers");

            // Add bound action for updating order price.
            ActionConfiguration updateOrderPrice = order.Action("UpdateOrderPrice");

            updateOrderPrice.Parameter <string>("Price");
            updateOrderPrice.ReturnsFromEntitySet <Order>("Orders");

            // Add bound function for delete order from customer and return the rest orders.
            FunctionConfiguration deleteOrderFromCustomer = customer.Function("DeleteOrderFromCustomer");

            deleteOrderFromCustomer.Parameter <int>("OrderId");
            deleteOrderFromCustomer.ReturnsCollectionFromEntitySet <Order>("Orders");

            return(builder.GetEdmModel());
        }
        private static void GetDescricaoProduto(ODataConventionModelBuilder builder)
        {
            var FunctionGetDescricaoProduto = builder.Function("GetDescricaoProduto");

            FunctionGetDescricaoProduto.Returns <string>();
            FunctionGetDescricaoProduto.Parameter <string>("Codigo");
        }
        private static void GetDescricaoAplicativo(ODataConventionModelBuilder builder)
        {
            var Function = builder.Function("GetDescricaoAplicativo");

            Function.Parameter <string>("Codigo");
            Function.Returns <string>();
        }
        public static IEdmModel GetConventionModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            EntitySetConfiguration<Employee> employees = builder.EntitySet<Employee>("Employees");
            EntityTypeConfiguration<Employee> employee = employees.EntityType;
            employee.EnumProperty<Gender>(e => e.Sex).Name = "Gender";

            employee.Collection.Function("GetEarliestTwoEmployees").ReturnsCollectionFromEntitySet<Employee>("Employees");

            var functionConfiguration = builder.Function("GetAddress");
            functionConfiguration.Parameter<int>("id");
            functionConfiguration.Returns<Address>();

            var actionConfiguration = builder.Action("SetAddress");
            actionConfiguration.Parameter<int>("id");
            actionConfiguration.Parameter<Address>("address");
            actionConfiguration.ReturnsFromEntitySet(employees);

            var resetDataSource = builder.Action("ResetDataSource");

            builder.Namespace = typeof(Employee).Namespace;
            builder.EnableLowerCamelCase();
            var edmModel = builder.GetEdmModel();
            return edmModel;
        }
Example #24
0
        public static IEdmModel GetEdmModelV1()
        {
            var builder = new ODataConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            builder.Singleton <Customer>("Me");

            var function = builder.Function("RateByOrder");

            function.Parameter <int>("order");
            function.Returns <int>();

            var action = builder.EntityType <Customer>().Action("RateByName");

            action.Parameter <string>("name");
            action.Parameter <int>("age");
            action.Returns <string>();

            // bound action
            ActionConfiguration boundAction = builder.EntityType <Customer>().Action("BoundAction");

            boundAction.Parameter <int>("p1");
            boundAction.Parameter <Address>("p2");
            boundAction.Parameter <Color?>("color");
            boundAction.CollectionParameter <string>("p3");
            boundAction.CollectionParameter <Address>("p4");
            boundAction.CollectionParameter <Color?>("colors");

            return(builder.GetEdmModel());
        }
Example #25
0
        private static IEdmModel GetModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder    builder             = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <Trade> tradesConfiguration = builder.EntitySet <Trade>("Trades");

            //Add bound function
            var boundFunction = tradesConfiguration.EntityType.Collection.Function("GetTradingVolume");

            boundFunction.Parameter <string>("productName");
            boundFunction.Parameter <CountryOrRegion>("PortingCountryOrRegion");
            boundFunction.Returns <long?>();

            //Add bound function
            boundFunction = tradesConfiguration.EntityType.Collection.Function("GetTopTrading");
            boundFunction.Parameter <string>("productName");
            boundFunction.ReturnsFromEntitySet <Trade>("Trades");
            boundFunction.IsComposable = true;

            //Add unbound function
            var unboundFunction = builder.Function("GetTradeByCountry");

            unboundFunction.Parameter <CountryOrRegion>("PortingCountryOrRegion");
            unboundFunction.ReturnsCollectionFromEntitySet <Trade>("Trades");

            builder.Namespace = typeof(CountryOrRegion).Namespace;

            return(builder.GetEdmModel());
        }
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );

            ODataModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <Product>("Products");
            builder.EntitySet <Supplier>("Suppliers");
            builder.Namespace = "ProductService";
            builder.EntityType <Product>()
            .Action("Rate")
            .Parameter <int>("Rating");
            builder.EntityType <Product>().Collection
            .Function("MostExpensive")
            .Returns <double>();
            builder.Function("GetSalesTaxRate")
            .Returns <double>()
            .Parameter <int>("PostalCode");
            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: null,
                model: builder.GetEdmModel());
        }
        private IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            FunctionConfiguration getEnum = builder.Function("GetEnum");

            getEnum.Parameter <SimpleEnum>("simpleEnum");
            getEnum.Returns <SimpleEnum>();

            FunctionConfiguration getFlagsEnum = builder.Function("GetFlagsEnum");

            getFlagsEnum.Parameter <FlagsEnum>("flagsEnum");
            getFlagsEnum.Returns <FlagsEnum>();

            return(builder.GetEdmModel());
        }
        private IEdmModel GetEdmModel()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            EntitySetConfiguration <Employee>            employees   = builder.EntitySet <Employee>("Employees");
            EntitySetConfiguration <Party>               parties     = builder.EntitySet <Party>("Parties");
            EntitySetConfiguration <PermissionContainer> permissions = builder.EntitySet <PermissionContainer>("Permissions");
            EntitySetConfiguration <Department>          departments = builder.EntitySet <Department>("Departments");

            permissions.EntityType.HasKey(t => t.Key);
            employees.EntityType.HasKey(t => t.Oid);
            parties.EntityType.HasKey(t => t.Oid);
            departments.EntityType.HasKey(t => t.Oid);

            FunctionConfiguration logon = builder.Function("Login");

            logon.Returns <int>();
            logon.Parameter <string>("userName");
            logon.Parameter <string>("password");
            builder.Action("Logoff");

            ActionConfiguration getPermissions = builder.Action("GetPermissions");

            getPermissions.Parameter <string>("typeName");
            getPermissions.CollectionParameter <string>("keys");
            return(builder.GetEdmModel());
        }
		public static IEdmModel GetModel()
		{
			ODataModelBuilder builder = new ODataConventionModelBuilder();
			builder.Namespace = "D";
			builder.ContainerName = "Default";

			EntitySetConfiguration<City> cities = builder.EntitySet<City>("City");
			EntitySetConfiguration<Stadium> stadiums = builder.EntitySet<Stadium>("Stadium");

			// Per Collection Stadium
			FunctionConfiguration getStadiumsWithFunction = stadiums.EntityType.Collection.Function("GetStadiumsWithFunction");
			getStadiumsWithFunction.ReturnsCollectionFromEntitySet<Stadium>("Stadium");

			//  Per Collection Stadium, returns single entity
			FunctionConfiguration getStadiumsTest = stadiums.EntityType.Collection.Function("GetStadiumTest");
			getStadiumsTest.Parameter<string>("test");
			getStadiumsTest.Parameter<string>("name");
			getStadiumsTest.ReturnsFromEntitySet<Stadium>("Stadium");

			// Per Entity (Single key property) City
			FunctionConfiguration getStadiumFromCityWithFunction = cities.EntityType.Function("GetStadiumsFromCityWithFunction");
			getStadiumFromCityWithFunction.ReturnsCollectionFromEntitySet<Stadium>("Stadium");

			// Per Entity composite key Stadium
			FunctionConfiguration getCityFromStadiumWithFunction = stadiums.EntityType.Function("GetCityFromStadiumWithFunction");
			getCityFromStadiumWithFunction.ReturnsFromEntitySet<City>("City");

			// Global Function
			builder.Function("GlobalFunction").ReturnsCollectionFromEntitySet<Stadium>("Stadium");

			
			
			return builder.GetEdmModel();
		}
Example #30
0
        public static void Register(HttpConfiguration config)
        {
            var builder = new ODataConventionModelBuilder();

            //http://stackoverflow.com/questions/39515218/odata-error-the-query-specified-in-the-uri-is-not-valid-the-property-cannot-be
            config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);

            //builder.EntitySet<Product>("Products").EntityType.Ignore( p => p.ProductCategory);		// needed for serialization to work
            builder.EntitySet <Product>("Products");

            builder.EntitySet <Category>("Categories");

            builder.EntitySet <Order>("Orders");

            builder.EntitySet <OrderItem>("OrderItems");

            builder.Namespace = "ProductService";
            builder.EntityType <Product>()
            .Action("ChangeCategory")
            .Parameter <int>("CategoryId");

            builder.EntityType <Product>().Collection
            .Function("MostPopular")
            .Returns <int>()
            .Parameter <int>("CategoryId");

            builder.Function("ProductCount")
            .Returns <int>();

            config.MapODataServiceRoute("ODataRoute", "ODataAPI", builder.GetEdmModel());
        }
        public static IEdmModel GetConventionModel()
        {
            ODataConventionModelBuilder        builder   = new ODataConventionModelBuilder();
            EntitySetConfiguration <Employee>  employees = builder.EntitySet <Employee>("Employees");
            EntityTypeConfiguration <Employee> employee  = employees.EntityType;

            employee.EnumProperty <Gender>(e => e.Sex).Name = "Gender";

            employee.Collection.Function("GetEarliestTwoEmployees").ReturnsCollectionFromEntitySet <Employee>("Employees");

            var functionConfiguration = builder.Function("GetAddress");

            functionConfiguration.Parameter <int>("id");
            functionConfiguration.Returns <Address>();

            var actionConfiguration = builder.Action("SetAddress");

            actionConfiguration.Parameter <int>("id");
            actionConfiguration.Parameter <Address>("address");
            actionConfiguration.ReturnsFromEntitySet(employees);

            var resetDataSource = builder.Action("ResetDataSource");

            builder.Namespace = typeof(Employee).Namespace;
            builder.EnableLowerCamelCase();
            var edmModel = builder.GetEdmModel();

            return(edmModel);
        }
        private static IEdmModel GetModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            EntitySetConfiguration<Trade> tradesConfiguration = builder.EntitySet<Trade>("Trades");

            //Add bound function
            var boundFunction = tradesConfiguration.EntityType.Collection.Function("GetTradingVolume");
            boundFunction.Parameter<string>("productName");
            boundFunction.Parameter<Country>("portingCountry");
            boundFunction.Returns<long?>();

            //Add bound function
            boundFunction = tradesConfiguration.EntityType.Collection.Function("GetTopTrading");
            boundFunction.Parameter<string>("productName");
            boundFunction.ReturnsFromEntitySet<Trade>("Trades");
            boundFunction.IsComposable = true;

            //Add unbound function
            var unboundFunction = builder.Function("GetTradeByCountry");
            unboundFunction.Parameter<Country>("portingCountry");
            unboundFunction.ReturnsCollectionFromEntitySet<Trade>("Trades");

            builder.Namespace = typeof(Country).Namespace;

           return builder.GetEdmModel();
        }
 public ODataSwaggerConverterTest()
 {
     var builder = new ODataConventionModelBuilder();
     builder.EntitySet<Customer>("Customers");
     builder.EntitySet<Order>("Orders");
     builder.Function("UnboundFunction").Returns<string>().Parameter<int>("param");
     builder.Action("UnboundAction").Parameter<double>("param");
     builder.EntityType<Customer>().Function("BoundFunction").Returns<double>().Parameter<string>("name");
     _model = builder.GetEdmModel();
 }
 private static IEdmModel GetEdmModel()
 {
     var builder = new ODataConventionModelBuilder();
     builder.EntitySet<Customer>("Customers");
     builder.EntitySet<Order>("Orders");
     builder.Function("UnboundFunction").Returns<string>().Parameter<int>("param");
     builder.Action("UnboundAction").Parameter<double>("param");
     builder.EntityType<Customer>().Function("BoundFunction").Returns<double>().Parameter<string>("name");
     return builder.GetEdmModel();
 }
Example #35
0
 static StoreModel()
 {
     var builder = new ODataConventionModelBuilder();
     builder.Namespace = "Microsoft.Restier.WebApi.Test";
     builder.EntitySet<Product>("Products");
     builder.Function("GetBestProduct").ReturnsFromEntitySet<Product>("Products");
     builder.Action("RemoveWorstProduct").ReturnsFromEntitySet<Product>("Products");
     Model = (EdmModel)builder.GetEdmModel();
     Product = (IEdmEntityType)Model.FindType("Microsoft.Restier.WebApi.Test.Product");
 }
        private IEdmModel GetEdmMode()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet<OptionSet>("OptionSets");
            builder.EntitySet<OptionSetEntity>("OptionSetEntities");
            builder.EntitySet<GroupItemType>("GroupItemTypes");
            builder.EntitySet<Group>("Groups");
            builder.EntitySet<GroupItem>("GroupItems");

            builder.Function("GetAllTables")
                    .ReturnsCollection<BaseTable>();

            builder.Function("GetAllColumns")
                   .ReturnsCollection<BaseTable>()
                   .Parameter<string>("TableName");

            return builder.GetEdmModel();
        }
        private static IEdmModel GetModel()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<DerivedTypeA>("SetA");
            builder.EntitySet<DerivedTypeB>("SetB");

            builder.EntityType<BaseType>(); // this line is necessary.
            builder.Function("ReturnAll").ReturnsCollection<BaseType>();

            return builder.GetEdmModel();
        }
 private static IEdmModel GetEdmModel()
 {
     var builder = new ODataConventionModelBuilder();
     builder.EntitySet<Customer>("Customers");
     builder.EntitySet<Order>("Orders");
     builder.Function("UnboundFunction").Returns<string>().Parameter<int>("param");
     builder.Action("UnboundAction").Parameter<double>("param");
     builder.EntityType<Customer>().Function("BoundFunction").Returns<double>().Parameter<string>("name");
     builder.EntitySet<CompositeKeyItem>("CompositeKeyItems");
     builder.EntityType<CompositeKeyItem>().HasKey(x => new { x.FirstKey, x.SecondKey });
     return builder.GetEdmModel();
 }
        private static IEdmModel GetEdmModel()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet<Product2>("Products");

            builder.Function("ProductsWithIds")
                   .ReturnsCollectionFromEntitySet<Product2>("Products")
                   .CollectionParameter<int>("Ids");

            return builder.GetEdmModel();
        }
        private static IEdmModel GetEdmModel()
        {
            var builder = new ODataConventionModelBuilder();

            builder.EntitySet<Pin>("Pins");

            builder.Function("Foo").Returns<int>();

            builder.EntityType<Pin>().Collection.Function("Archived").ReturnsCollection<Pin>();

            return builder.GetEdmModel();
        }
Example #41
0
        public static void ConfigureSsisService(this IAppBuilder app)
        {
            Debug.Assert(app != null);

            //// build EDM model

            var builder = new ODataConventionModelBuilder()
            {
                Namespace = typeof(SsisController).Namespace,
                ContainerName = "DefaultContainer"
            };

            builder.ComplexType<JobParameter>();
            builder.ComplexType<JobStatusResult>();
            builder.EnumType<JobStatus>();
            builder.EnumType<JobParameterType>();

            {
                var function = builder.Function("GetStatus");
                function.Parameter<string>("name").OptionalParameter = false;
                function.Returns<JobStatusResult>();
            }

            {
                var action = builder.Action("Run");
                action.Parameter<string>("name").OptionalParameter = false;
                action.CollectionParameter<JobParameter>("parameters").OptionalParameter = false;
                action.Returns<string>();
            }

            {
                var action = builder.Action("Stop");
                action.Parameter<string>("name").OptionalParameter = false;
                action.Returns<string>();
            }

            var edmModel = builder.GetEdmModel();

            //// configure web API

            var config = new HttpConfiguration() { IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always };
            config.MapODataServiceRoute("SsisService", "ssisservice", edmModel);
            config.Services.Replace(typeof(IHttpControllerSelector), new ClientHttpControllerSelector(config, typeof(SsisServiceHelper)));
            config.EnsureInitialized();

            app.UseWebApi(config);
        }
        private static IEdmModel GetEdmModel(HttpConfiguration config)
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder(config);

            builder.EntitySet<Product>("Products");

            var productType = builder.EntityType<Product>();

            // Function bound to a collection
            // Returns the most expensive product, a single entity
            productType.Collection
                .Function("MostExpensive")
                .Returns<double>();

            // Function bound to a collection
            // Returns the top 10 product, a collection
            productType.Collection
                .Function("Top10")
                .ReturnsCollectionFromEntitySet<Product>("Products");

            // Function bound to a single entity
            // Returns the instance's price rank among all products
            productType
                .Function("GetPriceRank")
                .Returns<int>();

            // Function bound to a single entity
            // Accept a string as parameter and return a double
            // This function calculate the general sales tax base on the 
            // state
            productType
                .Function("CalculateGeneralSalesTax")
                .Returns<double>()
                .Parameter<string>("state");

            // Unbound Function
            builder.Function("GetSalesTaxRate")
                .Returns<double>()
                .Parameter<string>("state");

            return builder.GetEdmModel();
        }
Example #43
0
        public static IEdmModel GetModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            EntitySetConfiguration<Employee> employees = builder.EntitySet<Employee>("Employees");
            EntityTypeConfiguration<Employee> employee = employees.EntityType;

            // Action that adds a skill to the skill set.
            ActionConfiguration actionConfiguration = employee.Action("AddAccessLevel");
            actionConfiguration.Parameter<string>("AccessLevel");// Now action parameters does not support Enum type, so use string instead.
            actionConfiguration.Returns<AccessLevel>();

            // Function that tells whether an employee has the given AccessLevel
            var functionConfiguration = builder.Function("HasAccessLevel");
            functionConfiguration.Parameter<int>("ID");
            functionConfiguration.Parameter<AccessLevel>("AccessLevel");
            functionConfiguration.Returns<bool>();

            builder.Namespace = typeof(Employee).Namespace;

            return builder.GetEdmModel();
        }
Example #44
0
        public static void Register(HttpConfiguration config)
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Person>("Person");
            builder.EntitySet<Photo>("Photo");

            builder.Namespace = "webapi";

            builder.EntityType<Photo>()
                .Action("PhotoPrice")
                .Parameter<int>("Price");

            builder.EntityType<Photo>()
                .Function("ChangeName")
                .Returns<bool>();

            builder.Function("GetAPrice").Returns<int>().Parameter<int>("Id");

            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: null,
                model: builder.GetEdmModel());
        }
Example #45
0
        public void Configuration(IAppBuilder builder)
        {
            var odataBuilder = new ODataConventionModelBuilder();
            odataBuilder.EntitySet<Player>("Players");
            var player = odataBuilder.EntityType<Player>();

            //collection function
            player.Collection.Function("TopPpg").ReturnsCollection<Player>();

            //entity function
            player.Function("PercentageOfAllGoals").Returns<double>();

            //service function
            var serviceFunc = odataBuilder.Function("TotalTeamPoints");
            serviceFunc.Returns<int>().Parameter<string>("team");
            serviceFunc.IncludeInServiceDocument = true;

            var edm = odataBuilder.GetEdmModel();

            var config = new HttpConfiguration();
            config.MapODataServiceRoute("Default OData", "odata", edm);
            builder.UseWebApi(config);
        }
        public static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            EntityTypeConfiguration<Customer> customer = builder.EntitySet<Customer>("Customers").EntityType;
            EntityTypeConfiguration<Order> order = builder.EntitySet<Order>("Orders").EntityType;

            // Add unbound function for get special customer.
            FunctionConfiguration getCustomersWithNameContaining = builder.Function("GetCustomersWithNameContaining");
            getCustomersWithNameContaining.Parameter<string>("ContainedString");
            getCustomersWithNameContaining.ReturnsCollectionFromEntitySet<Customer>("Customers");

            // Add bound action for updating order price.
            ActionConfiguration updateOrderPrice = order.Action("UpdateOrderPrice");
            updateOrderPrice.Parameter<string>("Price");
            updateOrderPrice.ReturnsFromEntitySet<Order>("Orders");

            // Add bound function for delete order from customer and return the rest orders.
            FunctionConfiguration deleteOrderFromCustomer = customer.Function("DeleteOrderFromCustomer");
            deleteOrderFromCustomer.Parameter<int>("OrderId");
            deleteOrderFromCustomer.ReturnsCollectionFromEntitySet<Order>("Orders");

            return builder.GetEdmModel();
        }
Example #47
0
        public static IEdmModel GetEdmModel()
        {
            var builder = new ODataConventionModelBuilder();
            var entityCollection = builder.EntitySet<DollarCountEntity>("DollarCountEntities").EntityType.Collection;

            // Add unbound functions that return collection.
            FunctionConfiguration function = builder.Function("UnboundFunctionReturnsPrimitveCollection");
            function.IsComposable = true;
            function.ReturnsCollection<int>();

            function = builder.Function("UnboundFunctionReturnsEnumCollection");
            function.IsComposable = true;
            function.ReturnsCollection<Color>();

            function = builder.Function("UnboundFunctionReturnsDateTimeOffsetCollection");
            function.IsComposable = true;
            function.ReturnsCollection<DateTimeOffset>();

            function = builder.Function("UnboundFunctionReturnsDateCollection");
            function.IsComposable = true;
            function.ReturnsCollection<Date>();

            function = builder.Function("UnboundFunctionReturnsComplexCollection");
            function.IsComposable = true;
            function.ReturnsCollection<DollarCountComplex>();

            function = builder.Function("UnboundFunctionReturnsEntityCollection");
            function.IsComposable = true;
            function.ReturnsCollectionFromEntitySet<DollarCountEntity>("DollarCountEntities");

            // Add bound functions that return collection.
            function = entityCollection.Function("BoundFunctionReturnsPrimitveCollection");
            function.IsComposable = true;
            function.ReturnsCollection<DateTimeOffset>();

            function = entityCollection.Function("BoundFunctionReturnsEnumCollection");
            function.IsComposable = true;
            function.ReturnsCollection<Color>();

            function = entityCollection.Function("BoundFunctionReturnsDateTimeOffsetCollection");
            function.IsComposable = true;
            function.ReturnsCollection<DateTimeOffset>();

            function = entityCollection.Function("BoundFunctionReturnsComplexCollection");
            function.IsComposable = true;
            function.ReturnsCollection<DollarCountComplex>();

            function = entityCollection.Function("BoundFunctionReturnsEntityCollection");
            function.IsComposable = true;
            function.ReturnsCollectionFromEntitySet<DollarCountEntity>("DollarCountEntities");

            return builder.GetEdmModel();
        }
        private IEdmModel GetEdmModel(HttpConfiguration configuration)
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder(configuration);
            builder.EntitySet<ConventionCustomer>("ConventionCustomers");
            builder.EntitySet<ConventionOrder>("ConventionOrders");
            builder.ComplexType<ConventionPerson>();
            builder.Entity<ConventionCustomer>().ComplexProperty<ConventionAddress>(c => c.Address);

            // Top level action import
            ActionConfiguration createConventionCustomerById = builder.Action("CreateConventionCustomerById");
            createConventionCustomerById.Parameter<int>("ID");
            createConventionCustomerById.ReturnsFromEntitySet<ConventionCustomer>("ConventionCustomers");

            // Top level action import without parameter and with a collection of primitive return type
            ActionConfiguration topCollectionPrimitiveAction = builder.Action("CreateCollectionMessages");
            topCollectionPrimitiveAction.ReturnsCollection<string>();

            // Top level function import
            FunctionConfiguration getAllCustomers = builder.Function("GetAllConventionCustomers");
            getAllCustomers.ReturnsCollectionFromEntitySet<ConventionCustomer>("ConventionCustomers");

            // Top level function import with one parameter
            FunctionConfiguration getCustomersById = builder.Function("GetConventionCustomerById");
            getCustomersById.Parameter<int>("CustomerId");
            getCustomersById.ReturnsFromEntitySet<ConventionCustomer>("ConventionCustomers");

            // Top level function import with two parameters
            FunctionConfiguration getOrder = builder.Function("GetConventionOrderByCustomerIdAndOrderName");
            getOrder.Parameter<int>("CustomerId");
            getOrder.Parameter<string>("OrderName");
            getOrder.ReturnsFromEntitySet<ConventionOrder>("ConventionOrders");

            return builder.GetEdmModel();
        }
        private static IEdmModel GetSampleModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.ComplexType<EnumComplex>();

            FunctionConfiguration function = builder.Function("NullableEnumFunction").Returns<bool>();
            function.Parameter<Color?>("ColorParameter");

            return builder.GetEdmModel();
        }
        private IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            FunctionConfiguration getEnum = builder.Function("GetEnum");
            getEnum.Parameter<SimpleEnum>("simpleEnum");
            getEnum.Returns<SimpleEnum>();

            FunctionConfiguration getFlagsEnum = builder.Function("GetFlagsEnum");
            getFlagsEnum.Parameter<FlagsEnum>("flagsEnum");
            getFlagsEnum.Returns<FlagsEnum>();

            return builder.GetEdmModel();
        }
        private static IEdmModel GetFunctionsEdmModel()
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet<Product>("Products");

            var productType = builder.EntityType<Product>();

            // Function bound to a collection that accepts an enum parameter
            var enumParamFunction = productType.Collection.Function("EnumParam");
            enumParamFunction.Parameter<int>("Id");
            enumParamFunction.Parameter<MyEnum>("EnumValue");
            enumParamFunction.ReturnsCollectionFromEntitySet<Product>("Products");

            // Function bound to an entity that accepts an enum parameter
            var enumParamEntityFunction = productType.Function("IsEnumValueMatch");
            enumParamEntityFunction.Parameter<MyEnum>("EnumValue");
            enumParamEntityFunction.Returns<bool>();

            // Function bound to a collection that accepts multiple parameters
            var multiParamFunction = productType.Collection.Function("MultipleParams");
            multiParamFunction.Parameter<int>("Id");
            multiParamFunction.Parameter<int>("Year");
            multiParamFunction.ReturnsCollectionFromEntitySet<Product>("Products");

            // Function bound to a collection
            // Returns the most expensive product, a single entity
            productType.Collection
                .Function("MostExpensive")
                .Returns<double>();

            // Function bound to a collection
            // Returns the top 10 product, a collection
            productType.Collection
                .Function("Top10")
                .ReturnsCollectionFromEntitySet<Product>("Products");

            // Function bound to a single entity
            // Returns the instance's price rank among all products
            productType
                .Function("GetPriceRank")
                .Returns<int>();

            // Function bound to a single entity
            // Accept a string as parameter and return a double
            // This function calculate the general sales tax base on the 
            // state
            productType
                .Function("CalculateGeneralSalesTax")
                .Returns<double>()
                .Parameter<string>("state");

            // Unbound Function
            builder.Function("GetSalesTaxRate")
                .Returns<double>()
                .Parameter<string>("state");

            return builder.GetEdmModel();
        }
        public void CanParseUndefinedEnumValue(Type enumerationType, string enumerationExpression)
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            EnumTypeConfiguration enumTypeConfiguration = builder.AddEnumType(enumerationType);
            FunctionConfiguration functionConfiguration = builder.Function("FunctionWithEnumParam");
            functionConfiguration.AddParameter("Enum", enumTypeConfiguration);
            functionConfiguration.Returns<int>();
            IEdmModel model = builder.GetEdmModel();
            string uri = String.Format("FunctionWithEnumParam(Enum={0})", enumerationExpression);

            // Act & Assert
            Assert.DoesNotThrow(() => _parser.Parse(model, _serviceRoot, uri));
        }
        public void CannotParseInvalidEnumValue(Type enumerationType, string enumerationExpression)
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            EnumTypeConfiguration enumTypeConfiguration = builder.AddEnumType(enumerationType);
            FunctionConfiguration functionConfiguration = builder.Function("FunctionWithEnumParam");
            functionConfiguration.AddParameter("Enum", enumTypeConfiguration);
            functionConfiguration.Returns<int>();
            IEdmModel model = builder.GetEdmModel();
            string uri = String.Format("FunctionWithEnumParam(Enum={0})", enumerationExpression);

            // Act & Assert
            Assert.Throws<ODataException>(
                () => _parser.Parse(model, _serviceRoot, uri),
                String.Format("The string '{0}' is not a valid enumeration type constant.", enumerationExpression));
        }
Example #54
0
        public void UnboundFunction_ForEnumTypeInODataConventionModelBuilder()
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            FunctionConfiguration functionConfiguration = builder.Function("UnboundFunction");
            functionConfiguration.Parameter<Color>("Color");
            functionConfiguration.ReturnsCollection<Color>();

            // Act & Assert
            IEdmModel model = builder.GetEdmModel();
            IEdmFunctionImport functionImport = model.EntityContainer.OperationImports().Single(o => o.Name == "UnboundFunction") as IEdmFunctionImport;

            IEdmTypeReference color = functionImport.Function.Parameters.Single(p => p.Name == "Color").Type;
            IEdmTypeReference returnType = functionImport.Function.ReturnType;
            IEdmEnumType colorType = model.SchemaElements.OfType<IEdmEnumType>().Single(e => e.Name == "Color");

            Assert.Same(colorType, color.Definition);
            Assert.True(returnType.IsCollection());
            Assert.Same(colorType, returnType.AsCollection().ElementType().Definition);
        }
        public void CanParse_FunctionParametersAlias_WithUnresolvedPathSegment()
        {
            // Arrange
            var builder = new ODataConventionModelBuilder();
            builder.EntitySet<ConventionCustomer>("Customers");
            FunctionConfiguration function = builder.Function("UnboundFunction");
            function.Parameter<int>("P1");
            function.Parameter<int>("P2");
            function.ReturnsFromEntitySet<ConventionCustomer>("Customers");
            function.IsComposable = true;
            IEdmModel model = builder.GetEdmModel();

            // Act
            ODataPath path = _parser.Parse(
                model,
                _serviceRoot,
                "UnboundFunction(P1=@p1,P2=@p2)/unknown?@p1=1&@p3=2&@p2=@p3");

            var functionSegment = (UnboundFunctionPathSegment)path.Segments.First();
            object p1 = functionSegment.GetParameterValue("P1");
            object p2 = functionSegment.GetParameterValue("P2");

            // Assert
            Assert.Equal(1, p1);
            Assert.Equal(2, p2);
        }
Example #56
0
        public void ODataConventionModelBuilder_HasCorrectEnumMember_AddUnboundFunctionAfterEntitySet()
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<EntityTypeWithEnumTypePropertyTestModel>("Entities");
            builder.Function("UnboundFunction").Returns<Color>();

            // Act
            IEdmModel model = builder.GetEdmModel();

            // Assert
            Assert.NotNull(model);
            IEnumerable<IEdmEnumType> colors = model.SchemaElements.OfType<IEdmEnumType>().Where(e => e.Name == "Color");
            IEdmEnumType color = Assert.Single(colors);
            Assert.Equal(3, color.Members.Count());
            Assert.Single(color.Members.Where(m => m.Name == "Red"));
            Assert.Single(color.Members.Where(m => m.Name == "Green"));
            Assert.Single(color.Members.Where(m => m.Name == "Blue"));
        }
        public static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<ConventionCustomer>("ConventionCustomers");
            builder.EntitySet<ConventionOrder>("ConventionOrders");

            EnumTypeConfiguration<ConventionGender> enumType = builder.EnumType<ConventionGender>();
            enumType.Member(ConventionGender.Female);
            enumType.Member(ConventionGender.Male);
            #region functions

            FunctionConfiguration getAllCustomers = builder.Function("GetAllConventionCustomers");
            getAllCustomers.ReturnsCollectionFromEntitySet<ConventionCustomer>("ConventionCustomers");
            getAllCustomers.IsComposable = true;

            // Return all the customers whose name contains CustomerName
            FunctionConfiguration getAllCustomersOverload = builder.Function("GetAllConventionCustomers");
            getAllCustomersOverload.ReturnsCollectionFromEntitySet<ConventionCustomer>("ConventionCustomers");
            getAllCustomersOverload.Parameter<string>("CustomerName");
            getAllCustomersOverload.IsComposable = true;

            FunctionConfiguration getCustomersById = builder.Function("GetConventionCustomerById");
            getCustomersById.Parameter<int>("CustomerId");
            getCustomersById.ReturnsFromEntitySet<ConventionCustomer>("ConventionCustomers");
            getCustomersById.IsComposable = true;

            FunctionConfiguration getOrder = builder.Function("GetConventionOrderByCustomerIdAndOrderName");
            getOrder.Parameter<int>("CustomerId");
            getOrder.Parameter<string>("OrderName");
            getOrder.ReturnsFromEntitySet<ConventionOrder>("ConventionOrders");

            FunctionConfiguration getCustomerNameById = builder.Function("GetConventionCustomerNameById");
            getCustomerNameById.Parameter<int>("CustomerId");
            getCustomerNameById.Returns<string>();

            FunctionConfiguration getDefinedGenders = builder.Function("GetDefinedGenders");
            getDefinedGenders.ReturnsCollection<ConventionGender>()
                .IsComposable = true;

            FunctionConfiguration function = builder.Function("AdvancedFunction").Returns<bool>();
            function.CollectionParameter<int>("nums");
            function.CollectionParameter<ConventionGender>("genders");
            function.Parameter<ConventionAddress>("location");
            function.CollectionParameter<ConventionAddress>("addresses");
            function.EntityParameter<ConventionCustomer>("customer");
            function.CollectionEntityParameter<ConventionCustomer>("customers");

            #endregion

            #region actions

            ActionConfiguration resetDataSource = builder.Action("ResetDataSource");

            // bug: error message:  non-binding parameter type must be either Primitive, Complex, Collection of Primitive or a Collection of Complex.
            /*
            ActionConfiguration createCustomer = builder.Action("CreateCustomer");
            createCustomer.Parameter<ConventionCustomer>("Customer");
            createCustomer.ReturnsFromEntitySet<ConventionCustomer>("ConventionCustomers");
           */

            ActionConfiguration udpateAddress = builder.Action("UpdateAddress");
            udpateAddress.Parameter<ConventionAddress>("Address");
            udpateAddress.Parameter<int>("ID");
            udpateAddress.ReturnsCollectionFromEntitySet<ConventionCustomer>("ConventionCustomers");

            ActionConfiguration action = builder.Action("AdvancedAction");
            action.CollectionParameter<int>("nums");
            action.CollectionParameter<ConventionGender>("genders");
            action.Parameter<ConventionAddress>("location");
            action.CollectionParameter<ConventionAddress>("addresses");
            action.EntityParameter<ConventionCustomer>("customer");
            action.CollectionEntityParameter<ConventionCustomer>("customers");

            #endregion

            var schemaNamespace = typeof(ConventionCustomer).Namespace;

            builder.Namespace = schemaNamespace;

            var edmModel = builder.GetEdmModel();
            var container = edmModel.EntityContainer as EdmEntityContainer;

            #region function imports

            var entitySet = container.FindEntitySet("ConventionCustomers");
            var getCustomersByIdOfEdmFunction = edmModel.FindDeclaredOperations(schemaNamespace + ".GetConventionCustomerById").First() as EdmFunction;
            container.AddFunctionImport("GetConventionCustomerByIdImport", getCustomersByIdOfEdmFunction, new EdmEntitySetReferenceExpression(entitySet));

            var functionsOfGetAllConventionCustomers = edmModel.FindDeclaredOperations(schemaNamespace + ".GetAllConventionCustomers");
            var getAllConventionCustomersOfEdmFunction = functionsOfGetAllConventionCustomers.FirstOrDefault(f => f.Parameters.Count() == 0) as EdmFunction;
            container.AddFunctionImport("GetAllConventionCustomersImport", getAllConventionCustomersOfEdmFunction, new EdmEntitySetReferenceExpression(entitySet));

            // TODO delete this overload after bug 1640 is fixed: It can not find the correct overload function if the the function is exposed as a function import.
            var getAllConventionCustomersOverloadOfEdmFunction = functionsOfGetAllConventionCustomers.FirstOrDefault(f => f.Parameters.Count() > 0) as EdmFunction;
            container.AddFunctionImport("GetAllConventionCustomersImport", getAllConventionCustomersOverloadOfEdmFunction, new EdmEntitySetReferenceExpression(entitySet));

            var entitySet1 = container.FindEntitySet("ConventionOrders");
            var GetConventionOrderByCustomerIdAndOrderNameOfEdmFunction = edmModel.FindDeclaredOperations(schemaNamespace + ".GetConventionOrderByCustomerIdAndOrderName").First() as EdmFunction;
            container.AddFunctionImport("GetConventionOrderByCustomerIdAndOrderNameImport", GetConventionOrderByCustomerIdAndOrderNameOfEdmFunction, new EdmEntitySetReferenceExpression(entitySet1));

            var getConventionCustomerNameByIdOfEdmFunction = edmModel.FindDeclaredOperations(schemaNamespace + ".GetConventionCustomerNameById").First() as EdmFunction;
            container.AddFunctionImport("GetConventionCustomerNameByIdImport", getConventionCustomerNameByIdOfEdmFunction, null);

            #endregion

            #region action imports

            var resetDataSourceOfEdmAction = edmModel.FindDeclaredOperations(schemaNamespace + ".ResetDataSource").FirstOrDefault() as EdmAction;
            container.AddActionImport("ResetDataSourceImport", resetDataSourceOfEdmAction);

            // TODO: it is a potential issue that entity can not be used as an un-bound parameter.
            /*
            var createCustomerOfEdmAction = edmModel.FindDeclaredOperations(schemaNamespace + ".CreateCustomer").FirstOrDefault() as EdmAction;
            container.AddActionImport("CreateCustomerImport", createCustomerOfEdmAction);
            */
            var updateAddressOfEdmAction = edmModel.FindDeclaredOperations(schemaNamespace + ".UpdateAddress").FirstOrDefault() as EdmAction;
            container.AddActionImport("UpdateAddressImport", updateAddressOfEdmAction, new EdmEntitySetReferenceExpression(entitySet));

            #endregion

            return edmModel;
        }
        private IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntityType<Customer>().Namespace = "NS";
            builder.ComplexType<Address>().Namespace = "NS";

            FunctionConfiguration getEnum = builder.Function("GetEnum");
            getEnum.Parameter<SimpleEnum>("simpleEnum");
            getEnum.Returns<SimpleEnum>();

            FunctionConfiguration getFlagsEnum = builder.Function("GetFlagsEnum");
            getFlagsEnum.Parameter<FlagsEnum>("flagsEnum");
            getFlagsEnum.Returns<FlagsEnum>();

            FunctionConfiguration function = builder.Function("GetNullableFlagsEnum").Returns<bool>();
            function.Parameter<FlagsEnum?>("flagsEnum");

            builder.Function("GetAddress").Returns<bool>().Parameter<Address>("address");
            builder.Function("GetCustomer").Returns<bool>().Parameter<Customer>("customer");
            return builder.GetEdmModel();
        }
Example #59
0
        private static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.Namespace = "ODataSamples.WebApiService.Models";
            builder.ContainerName = "DefaultContainer";

            builder.EntitySet<Person>("People");
            builder.EntitySet<Airport>("Airports");
            builder.EntitySet<Airline>("Airlines");
            builder.Singleton<Person>("Me");

            // Customer - Order scenarios
            builder.EntitySet<Customer>("Customers");
            builder.EntitySet<Order>("Orders");

            #region Unbound Function & Action

            builder.Action("ResetDataSource");

            //TODO : Double type has some issue.
            var GetNearestAirportFun = builder.Function("GetNearestAirport");
            GetNearestAirportFun.Parameter<double>("lat");
            GetNearestAirportFun.Parameter<double>("lon");
            GetNearestAirportFun.ReturnsFromEntitySet<Airport>("Airports");

            #endregion


            #region Person Function & Action

            var personType = builder.EntityType<Person>();
            personType.Function("GetFavoriteAirline")
                .ReturnsFromEntitySet<Airline>("Airlines");

            //TODO: Fix this issue, the return type can't be "Trip".
            personType.Function("GetFriendsTrips")
                .ReturnsCollectionFromEntitySet<Airline>("Airlines")
                .Parameter<string>("userName");

            var shareTripAction = personType.Action("ShareTrip");
            shareTripAction.Parameter<string>("userName");
            shareTripAction.Parameter<int>("tripId");

            #endregion


            #region Trip Function & Action
            // TODO: The request will fail, should fix this issue.
            // GET odata/People('russellwhyte')/Trips(1001)/ODataSamples.WebApiService.Models.GetInvolvedPeople()
            var tripType = builder.EntityType<Trip>();
            tripType.Function("GetInvolvedPeople")
                .ReturnsCollectionFromEntitySet<Person>("People");

            #endregion


            #region Add Navigation Target

            var edmModel = builder.GetEdmModel();
            var peopleEntitySet = edmModel.EntityContainer.FindEntitySet("People") as EdmEntitySet;
            var meSingleton = edmModel.EntityContainer.FindSingleton("Me") as EdmSingleton;
            var flightEntityType = edmModel.FindDeclaredType("ODataSamples.WebApiService.Models.Flight") as EdmEntityType;

            var propertyAriline = flightEntityType.FindProperty("Airline") as EdmNavigationProperty;
            var propertyFrom = flightEntityType.FindProperty("From") as EdmNavigationProperty;
            var propertyTo = flightEntityType.FindProperty("To") as EdmNavigationProperty;

            var targetAirlines = edmModel.EntityContainer.FindEntitySet("Airlines");
            var targetAirports = edmModel.EntityContainer.FindEntitySet("Airports");

            peopleEntitySet.AddNavigationTarget(propertyAriline, targetAirlines);
            peopleEntitySet.AddNavigationTarget(propertyFrom, targetAirports);
            peopleEntitySet.AddNavigationTarget(propertyTo, targetAirports);

            meSingleton.AddNavigationTarget(propertyAriline, targetAirlines);
            meSingleton.AddNavigationTarget(propertyFrom, targetAirports);
            meSingleton.AddNavigationTarget(propertyTo, targetAirports);

            #endregion

            return edmModel;
        }
Example #60
-6
        public static IEdmModel GetEdmModel()
        {
            if (_edmModel == null)
            {
                var builder = new ODataConventionModelBuilder();
                builder.EntitySet <Customer>("Customers");
                builder.EntitySet <Order>("Orders");

                // two overload function import
                var function = builder.Function("CalcByRating");
                function.Parameter <int>("order");
                function.ReturnsFromEntitySet <Customer>("Customers");

                function = builder.Function("CalcByRating");
                function.Parameter <string>("name");
                function.ReturnsFromEntitySet <Customer>("Customers");

                // action import
                var action = builder.Action("CalcByRatingAction");
                action.Parameter <int>("order");
                action.ReturnsFromEntitySet <Customer>("Customers");

                _edmModel = builder.GetEdmModel();
            }

            return(_edmModel);
        }