Esempio n. 1
0
        public static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

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

            builder.EntityType <Customer>().Function("CalculateSalary").Returns <int>().Parameter <int>("month");
            builder.EntityType <Customer>().Action("UpdateAddress");
            builder.EntityType <Customer>()
            .Collection.Function("GetCustomerByGender")
            .ReturnsCollectionFromEntitySet <Customer>("Customers")
            .Parameter <Gender>("gender");

            return(builder.GetEdmModel());
        }
Esempio n. 2
0
        public static IEdmModel GetTypedConventionModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Employee>("Employees");
            builder.EntitySet <Account>("Accounts");

            builder.EnumType <Gender>();

            AddBoundActionsAndFunctions(builder.EntityType <Account>());
            AddUnboundActionsAndFunctions(builder);

            builder.Namespace = typeof(Account).Namespace;

            return(builder.GetEdmModel());
        }
Esempio n. 3
0
        public static IEdmModel GetModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder builder = configuration.CreateConventionModelBuilder();
            var singerConfiguration             = builder.EntitySet <Singer>("Singers");

            singerConfiguration.EntityType.Collection.Action("ResetDataSource");

            var albumConfiguration = builder.EntitySet <Album>("Albums");

            albumConfiguration.EntityType.Collection.Action("ResetDataSource");

            albumConfiguration.EntityType.Function("GetSingers").ReturnsCollectionFromEntitySet <Singer>("Singers").IsComposable = true;
            builder.Namespace = typeof(Singer).Namespace;

            return(builder.GetEdmModel());
        }
Esempio n. 4
0
        public static IEdmModel GetConventionModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder builder = configuration.CreateConventionModelBuilder();
            var paymentInstrumentType           = builder.EntityType <PaymentInstrument>();

            builder.EntitySet <Account>("Accounts");

            builder.EntitySet <Account>("PaginatedAccounts");

            builder.Singleton <Account>("AnonymousAccount");

            AddBoundActionsAndFunctions(builder);

            builder.Namespace = typeof(Account).Namespace;

            return(builder.GetEdmModel());
        }
Esempio n. 5
0
        public static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            foreach (var type in Creator.EntityTypes)
            {
                var entity = builder.AddEntityType(type);
                builder.AddEntitySet(type.Name, entity);
            }

            foreach (var type in Creator.ComplexTypes.Where(type => type.IsEnum))
            {
                var entity = builder.AddEnumType(type);
            }

            return(builder.GetEdmModel());
        }
Esempio n. 6
0
        private static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder            builder           = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <ETagsCustomer> eTagsCustomersSet = builder.EntitySet <ETagsCustomer>("ETagsCustomers");

            eTagsCustomersSet.HasRequiredBinding(c => c.RelatedCustomer, eTagsCustomersSet);
            eTagsCustomersSet.HasRequiredBinding(c => c.ContainedCustomer, eTagsCustomersSet);
            EntitySetConfiguration <ETagsCustomer> eTagsDerivedCustomersSet = builder.EntitySet <ETagsCustomer>("ETagsDerivedCustomers");

            eTagsDerivedCustomersSet.HasRequiredBinding(c => c.RelatedCustomer, eTagsCustomersSet);
            eTagsDerivedCustomersSet.HasRequiredBinding(c => c.ContainedCustomer, eTagsCustomersSet);
            SingletonConfiguration <ETagsCustomer> eTagsCustomerSingleton = builder.Singleton <ETagsCustomer>("ETagsDerivedCustomersSingleton");

            eTagsCustomerSingleton.HasRequiredBinding(c => c.RelatedCustomer, eTagsCustomersSet);
            eTagsCustomerSingleton.HasRequiredBinding(c => c.ContainedCustomer, eTagsCustomersSet);
            return(builder.GetEdmModel());
        }
Esempio n. 7
0
        public static IEdmModel GetConventionModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder        builder   = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <Employee>  employees = builder.EntitySet <Employee>("Employees");
            EntityTypeConfiguration <Employee> employee  = employees.EntityType;

            // maybe following lines are not required once bug #1587 is fixed.
            // 1587: It's better to support automatically adding actions and functions in ODataConventionModelBuilder.
            AddBoundActionsAndFunctions(employee);
            AddUnboundActionsAndFunctions(builder);

            builder.Namespace = typeof(Employee).Namespace;

            var edmModel = builder.GetEdmModel();

            return(edmModel);
        }
Esempio n. 8
0
        public static IEdmModel GetConventionModel(WebRouteConfiguration configuration, string singletonName)
        {
            ODataConventionModelBuilder       builder = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <Partner>  partnersConfiguration = builder.EntitySet <Partner>("Partners");
            EntityTypeConfiguration <Partner> partnerConfiguration  = partnersConfiguration.EntityType;

            partnerConfiguration.Collection.Action("ResetDataSource");

            SingletonConfiguration <Company> companyConfiguration = builder.Singleton <Company>(singletonName);

            companyConfiguration.EntityType.Action("ResetDataSource");
            companyConfiguration.EntityType.Function("GetPartnersCount").Returns <int>();

            builder.Namespace = typeof(Company).Namespace;

            return(builder.GetEdmModel());
        }
Esempio n. 9
0
        public static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            builder.EntitySet <Order>("Orders");
            IEdmModel model = builder.GetEdmModel();

            var stdDevMethods = GetCustomMethods(typeof(DbFunctions), StdDevMethodLabel);
            CustomAggregateMethodAnnotation customMethods = new CustomAggregateMethodAnnotation();

            customMethods.AddMethod(StdDevMethodToken, stdDevMethods);

            model.SetAnnotationValue(model, customMethods);

            return(model);
        }
Esempio n. 10
0
        protected override void UpdateConfiguration(WebRouteConfiguration configuration)
        {
            var controllers = new[] {
                typeof(ConventionCustomersController),
                typeof(MetadataController)
            };

            configuration.AddControllers(controllers);

            configuration.Routes.Clear();
            configuration.Count().Filter().OrderBy().Expand().MaxTop(null).Select();

            ODataConventionModelBuilder builder = configuration.CreateConventionModelBuilder();

            configuration.MapODataServiceRoute("unboundFunctionConvention", "odata", UnboundFunctionEdmModel.GetEdmModel(builder));

            configuration.EnsureInitialized();
        }
Esempio n. 11
0
        private static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <SingleResultCustomer>("SingleResultCustomers")
            .EntityType
            .Action("CreditRating")
            .Returns <double>();

            builder.EntitySet <SingleResultOrderDetail>("SingleResultOrderDetail");
            builder.EntityType <SingleResultPremiumCustomer>();
            builder.EntitySet <SingleResultOrder>("SingleResultOrder");
            builder.EntitySet <SingleResultBonus>("SingleResultBonus");

            IEdmModel model = builder.GetEdmModel();

            return(model);
        }
Esempio n. 12
0
        public static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            builder.EntitySet <Order>("Orders");
            builder.EntityType <SpecialOrder>();
            builder.EntityType <VipOrder>();
            builder.EntitySet <ChoiceOrder>("OrderChoices");
            builder.EntitySet <NormalOrder>("NormalOrders");
            builder.EntityType <DerivedOrder>();
            builder.EntityType <DerivedOrder2>();
            builder.EntitySet <OrderDetail>("OrderDetails");
            builder.EntitySet <People>("People");
            IEdmModel model = builder.GetEdmModel();

            return(model);
        }
Esempio n. 13
0
        public static IEdmModel GetEdmModelByModelBoundAPI(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            builder.EntityType <Customer>().HasMany(c => c.Orders).Select("Id");

            builder.EntitySet <Order>("Orders").EntityType.Select().Select(SelectExpandType.Disabled, "Id");
            builder.EntityType <Order>().HasMany(o => o.Customers).Select();

            builder.EntitySet <Car>("Cars")
            .EntityType.Select("Name")
            .Select("Id");

            // Need call API just like Order for SepcialOrder because model bound API doesn't support inheritance
            builder.EntityType <SpecialOrder>()
            .Select()
            .Select(SelectExpandType.Disabled, "Id")
            .Select(SelectExpandType.Disabled, "Name");

            builder.EntitySet <AutoSelectCustomer>("AutoSelectCustomers")
            .EntityType.Select(SelectExpandType.Automatic, "Name")
            .Expand(SelectExpandType.Automatic, "Order");

            builder.EntityType <SpecialCustomer>()
            .Select(SelectExpandType.Automatic, "Name", "VIPNumber")
            .Expand(SelectExpandType.Automatic, "Order");

            builder.EntityType <AutoSelectCustomer>()
            .HasOptional(c => c.Order)
            .Select(SelectExpandType.Automatic, "Name");

            builder.EntitySet <AutoSelectOrder>("AutoSelectOrders")
            .EntityType.Select(SelectExpandType.Automatic, "Id");

            builder.EntitySet <AutoSelectCar>("AutoSelectCars")
            .EntityType.Select(SelectExpandType.Disabled, "Name")
            .Select(SelectExpandType.Automatic);

            IEdmModel model = builder.GetEdmModel();

            return(model);
        }
Esempio n. 14
0
        private static IEdmModel GetConventionModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder builder = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <ModelAliasingMetadataCustomer> customers = builder.EntitySet <ModelAliasingMetadataCustomer>("ModelAliasingQueryCustomers");

            customers.EntityType.Name      = "Customer";
            customers.EntityType.Namespace = "ModelAliasing";
            customers.EntityType.ComplexProperty(c => c.BillingAddress).Name = "FinancialAddress";
            customers.EntityType.Property(c => c.Name).Name  = "ClientName";
            customers.EntityType.HasMany(c => c.Orders).Name = "Purchases";
            EntitySetConfiguration <ModelAliasingMetadataOrder> orders = builder.EntitySet <ModelAliasingMetadataOrder>("Orders");

            orders.EntityType.Name      = "Order";
            orders.EntityType.Namespace = "AliasedNamespace";
            EntityTypeConfiguration <ModelAliasingMetadataExpressOrder> expressOrder = builder.EntityType <ModelAliasingMetadataExpressOrder>().DerivesFrom <ModelAliasingMetadataOrder>();

            expressOrder.Name      = "ExpressOrder";
            expressOrder.Namespace = "Purchasing";
            expressOrder.Property(eo => eo.ExpressFee).Name = "Fee";
            EntityTypeConfiguration <ModelAliasingMetadataFreeDeliveryOrder> freeDeliveryOrder = builder.EntityType <ModelAliasingMetadataFreeDeliveryOrder>().DerivesFrom <ModelAliasingMetadataOrder>();

            freeDeliveryOrder.Name      = "FreeDeliveryOrder";
            freeDeliveryOrder.Namespace = "Purchasing";
            EntitySetConfiguration <ModelAliasingMetadataProduct>   products    = builder.EntitySet <ModelAliasingMetadataProduct>("Products");
            EntitySetConfiguration <ModelAliasingMetadataOrderLine> ordersLines = builder.EntitySet <ModelAliasingMetadataOrderLine>("OrdersLines");

            ordersLines.EntityType.Property(ol => ol.Price).Name = "Cost";
            ComplexTypeConfiguration <ModelAliasingMetadataRegion> region = builder.ComplexType <ModelAliasingMetadataRegion>();

            region.Name      = "PoliticalRegion";
            region.Namespace = "Location";

            ComplexTypeConfiguration <ModelAliasingMetadataAddress> address = builder.ComplexType <ModelAliasingMetadataAddress>();

            address.Name      = "Direction";
            address.Namespace = "Location";
            address.ComplexProperty <ModelAliasingMetadataRegion>(c => c.CountryOrRegion).Name = "Reign";
            return(builder.GetEdmModel());
        }
Esempio n. 15
0
        public static IEdmModel GetEdmModelByModelBoundAPI(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers")
            .EntityType.Expand(10, "Orders", "Friend", "CountableOrders")
            .Expand(8, SelectExpandType.Automatic, "AutoExpandOrder")
            .Page(5, 2);
            builder.EntityType <Customer>()
            .HasMany(p => p.Orders)
            .Expand(2, "Customers")
            .Page(2, 1)
            .Count(QueryOptionSetting.Disabled);
            builder.EntityType <Customer>()
            .HasMany(p => p.CountableOrders)
            .Count();
            builder.EntityType <Customer>()
            .HasOptional(p => p.Order)
            .Expand(SelectExpandType.Disabled);

            builder.EntitySet <Order>("Orders")
            .EntityType.Expand(6)
            .Expand(SelectExpandType.Disabled, "NoExpandCustomers")
            .Count()
            .Filter()
            .Filter(QueryOptionSetting.Disabled, "Id")
            .OrderBy()
            .OrderBy(QueryOptionSetting.Disabled, "Id");
            builder.EntityType <Order>()
            .HasMany(p => p.Customers)
            .Expand("Orders")
            .Page(2, 1)
            .Count(QueryOptionSetting.Disabled);
            builder.EntityType <Order>().HasMany(p => p.Customers2).Expand("Order").Page(1, null).Count();

            IEdmModel model = builder.GetEdmModel();

            return(model);
        }
        public static IEdmModel GetEdmModelByModelBoundAPI(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers")
            .EntityType.Expand(10, "Orders", "Friend")
            .Expand(8, SelectExpandType.Automatic, "AutoExpandOrder");
            builder.EntityType <Customer>().HasMany(p => p.Orders).Expand(2, "Customers");

            builder.EntityType <SpecialCustomer>()
            .HasOptional(p => p.SpecialOrder)
            .Expand(SelectExpandType.Automatic, "SpecialOrder");

            builder.EntitySet <Order>("Orders")
            .EntityType.Expand(6)
            .Expand(SelectExpandType.Disabled, "NoExpandCustomers");
            builder.EntityType <Order>().HasMany(p => p.Customers).Expand("Orders");
            builder.EntityType <Order>().HasMany(p => p.Customers2).Expand("Order");
            IEdmModel model = builder.GetEdmModel();

            return(model);
        }
Esempio n. 17
0
        private static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder             builder           = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <ETagsCustomer>  eTagsCustomersSet = builder.EntitySet <ETagsCustomer>("ETagsCustomers");
            EntityTypeConfiguration <ETagsCustomer> eTagsCustomers    = eTagsCustomersSet.EntityType;

            eTagsCustomers.Property(c => c.Id).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.Name).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.BoolProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.ByteProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.CharProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.DecimalProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.DoubleProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.ShortProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.LongProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.SbyteProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.FloatProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.UshortProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.UintProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.UlongProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.GuidProperty).IsConcurrencyToken();
            eTagsCustomers.Property(c => c.DateTimeOffsetProperty).IsConcurrencyToken();
            return(builder.GetEdmModel());
        }
Esempio n. 18
0
        public static IEdmModel GetEdmModelByModelBoundAPI(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers").EntityType.Filter("AutoExpandOrder", "Address");
            builder.EntityType <Customer>().HasMany(c => c.Orders).Filter("Id");
            builder.EntityType <Customer>().ComplexProperty(c => c.Address).Filter();

            builder.EntitySet <Order>("Orders").EntityType.Filter().Filter(QueryOptionSetting.Disabled, "Id");
            builder.EntityType <Order>().HasMany(o => o.Customers).Filter();

            builder.EntitySet <Car>("Cars")
            .EntityType.Filter("Name")
            .Filter(QueryOptionSetting.Disabled)
            .Filter("Id");
            // Need call API just like Order for SepcialOrder because model bound API doesn't support inheritance
            builder.EntityType <SpecialOrder>()
            .Filter()
            .Filter(QueryOptionSetting.Disabled, "Id")
            .Filter(QueryOptionSetting.Disabled, "Name");
            IEdmModel model = builder.GetEdmModel();

            return(model);
        }
Esempio n. 19
0
        public static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            builder.EntityType <Customer>().EnumProperty(c => c.Bucket);
            builder.EntitySet <Order>("Orders");

            var func = builder.Function("GetLastCommand");

            func.Returns <string>();

            var       clean = builder.Function("CleanCommands").Returns <bool>();
            IEdmModel model = builder.GetEdmModel();

            var stdDevMethods = GetCustomMethods(typeof(DbFunctions), StdDevMethodLabel);
            CustomAggregateMethodAnnotation customMethods = new CustomAggregateMethodAnnotation();

            customMethods.AddMethod(StdDevMethodToken, stdDevMethods);

            model.SetAnnotationValue(model, customMethods);

            return(model);
        }
Esempio n. 20
0
        private static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            var builder = configuration.CreateConventionModelBuilder();

            builder.EntitySet <EFSelectCustomer>("EFSelectCustomers");
            builder.EntitySet <EFSelectOrder>("EFSelectOrders");
            builder.EntitySet <EFWideCustomer>("EFWideCustomers");
            builder.Action("ResetDataSource-Customer");
            builder.Action("ResetDataSource-WideCustomer");
            builder.Action("ResetDataSource-Order");

            IEdmModel model = builder.GetEdmModel();

            for (int idx = 1; idx <= 5; idx++)
            {
                IEdmSchemaType nestedType = model.FindDeclaredType("Microsoft.Test.E2E.AspNet.OData.QueryComposition.CustomProperties" + idx);
                model.SetAnnotationValue(nestedType, new Microsoft.AspNet.OData.Query.ModelBoundQuerySettings()
                {
                    DefaultSelectType = SelectExpandType.Automatic
                });
            }

            return(model);
        }
Esempio n. 21
0
        private static IEdmModel GetActionsModel(WebRouteConfiguration configuration)
        {
            ODataModelBuilder builder         = configuration.CreateConventionModelBuilder();
            var baseEntitySet                 = builder.EntitySet <BaseEntity>("BaseEntity");
            var alwaysAvailableActionBaseType = baseEntitySet.EntityType.Action("AlwaysAvailableActionBaseType");
            var transientActionBaseType       = baseEntitySet.EntityType.Action("TransientActionBaseType");

            Func <ResourceContext, Uri> transientActionBaseTypeLinkFactory = eic =>
            {
                IEdmEntityType baseType = eic.EdmModel.FindType(typeof(BaseEntity).FullName) as IEdmEntityType;
                object         id;
                eic.EdmObject.TryGetPropertyValue("Id", out id);
                if (!eic.StructuredType.IsOrInheritsFrom(baseType) || (int)id % 2 == 1)
                {
                    return(null);
                }
                else
                {
                    // find the action
                    var action = eic.EdmModel.SchemaElements
                                 .Where(elem => elem.Name == "TransientActionBaseType")
                                 .Cast <EdmAction>()
                                 .FirstOrDefault();

                    var segments = new List <ODataPathSegment>();
                    segments.Add(new EntitySetSegment(eic.NavigationSource as IEdmEntitySet));
                    segments.Add(new KeySegment(new[] { new KeyValuePair <string, object>("Id", id) }, eic.StructuredType as IEdmEntityType, null));
                    var    pathHandler = eic.Request.GetPathHandler();
                    string link        = ResourceContextHelper.CreateODataLink(eic, "Actions", pathHandler, segments);
                    link += "/" + action.FullName();
                    return(new Uri(link));
                }
            };

            transientActionBaseType.HasActionLink(transientActionBaseTypeLinkFactory, true);
            var derivedEntityType = builder.EntityType <DerivedEntity>().DerivesFrom <BaseEntity>();
            var alwaysAvailableActionDerivedType = derivedEntityType.Action("AlwaysAvailableActionDerivedType");
            var transientActionDerivedType       = derivedEntityType.Action("TransientActionDerivedType");
            Func <ResourceContext, Uri> transientActionDerivedTypeLinkFactory = eic =>
            {
                IEdmEntityType derivedType = eic.EdmModel.FindType(typeof(DerivedEntity).FullName) as IEdmEntityType;
                object         id;
                eic.EdmObject.TryGetPropertyValue("Id", out id);
                if (!eic.StructuredType.IsOrInheritsFrom(derivedType) || (int)id % 2 == 1)
                {
                    return(null);
                }
                else
                {
                    // find the action
                    var action = eic.EdmModel.SchemaElements
                                 .Where(elem => elem.Name == "TransientActionDerivedType")
                                 .Cast <EdmAction>()
                                 .FirstOrDefault();

                    var segments = new List <ODataPathSegment>();
                    segments.Add(new EntitySetSegment(eic.NavigationSource as IEdmEntitySet));
                    segments.Add(new KeySegment(new[] { new KeyValuePair <string, object>("Id", id) }, eic.StructuredType as IEdmEntityType, null));
                    segments.Add(new TypeSegment(derivedType, null));
                    // bug 1985: Make the internal constructor as public in BoundActionPathSegment
                    //segments.Add(new BoundActionPathSegment(action));
                    var    pathHandler = eic.Request.GetPathHandler();
                    string link        = ResourceContextHelper.CreateODataLink(eic, "Actions", pathHandler, segments);
                    link += "/" + action.FullName();
                    return(new Uri(link));
                }
            };

            transientActionDerivedType.HasActionLink(transientActionDerivedTypeLinkFactory, true);
            return(builder.GetEdmModel());
        }
Esempio n. 22
0
        public static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            ODataConventionModelBuilder        builder = configuration.CreateConventionModelBuilder();
            EntitySetConfiguration <Employee>  entitySetConfiguration            = builder.EntitySet <Employee>("Employees");
            EntityTypeConfiguration <Manager>  entityTypeConfigurationOfManager  = builder.EntityType <Manager>();
            EntityTypeConfiguration <Employee> entityTypeConfigurationOfEmployee = builder.EntityType <Employee>();

            #region functions

            // Function bound to a collection of base EntityType.
            entityTypeConfigurationOfEmployee.Collection.Function("GetCount")
            .Returns <int>();

            // Overload
            entityTypeConfigurationOfEmployee.Collection.Function("GetCount")
            .Returns <int>()
            .Parameter <string>("Name");

            // Overload with one optional parameter
            var salaryRangeCount = entityTypeConfigurationOfEmployee.Collection.Function("GetWholeSalary")
                                   .Returns <int>();
            salaryRangeCount.Parameter <double>("minSalary");
            salaryRangeCount.Parameter <double>("maxSalary").Optional();
            salaryRangeCount.Parameter <double>("aveSalary").HasDefaultValue("8.9");

            // Function bound to a collection of derived EntityType.
            entityTypeConfigurationOfManager.Collection.Function("GetCount")
            .Returns <int>();

            // Function bound to an base EntityType
            entityTypeConfigurationOfEmployee.Function("GetEmailsCount")
            .Returns <int>();

            entityTypeConfigurationOfEmployee.Function("GetOptionalAddresses")
            .ReturnsCollection <Address>()
            .IsComposable = true;

            entityTypeConfigurationOfEmployee.Function("GetEmails")
            .ReturnsCollection <string>()
            .IsComposable = false;

            // Function bound to a derived EntityType
            entityTypeConfigurationOfManager.Function("GetEmailsCount")
            .Returns <int>();

            // Function with primitive and collection of primitive parameters
            var function = entityTypeConfigurationOfEmployee.Collection.Function("PrimitiveFunction").Returns <string>();
            function.Parameter <int>("param");
            function.Parameter <double?>("price");          // nullable
            function.Parameter <string>("name");            // nullable
            function.CollectionParameter <string>("names"); // collection with nullable element

            // Function with Enum and collection of Enum parameters
            function = entityTypeConfigurationOfEmployee.Collection.Function("EnumFunction").Returns <string>();
            function.Parameter <Color>("bkColor");
            function.Parameter <Color?>("frColor");         // nullable
            function.CollectionParameter <Color>("colors"); // collection with non-nullable element

            // Function with complex and collection of complex parameters
            function = entityTypeConfigurationOfEmployee.Collection.Function("ComplexFunction").ReturnsCollection <Address>();
            function.Parameter <Address>("address").Nullable = false;
            function.Parameter <Address>("location");            // nullable
            function.CollectionParameter <Address>("addresses"); // collection with nullable element

            // Function with entity and collection of entity parameters
            function = entityTypeConfigurationOfEmployee.Collection.Function("EntityFunction").Returns <string>();
            function.EntityParameter <Employee>("person").Nullable = false;
            function.EntityParameter <Employee>("guard");           // nullable
            function.CollectionEntityParameter <Employee>("staff"); // collection with nullable element

            #endregion

            #region actions

            // Action bound to a collection of base EntityType
            entityTypeConfigurationOfEmployee.Collection.Action("IncreaseSalary")
            .ReturnsCollectionFromEntitySet(entitySetConfiguration)
            .Parameter <string>("Name");

            // Action bound to a collection of derived EntityType
            entityTypeConfigurationOfManager.Collection.Action("IncreaseSalary")
            .ReturnsCollectionFromEntitySet(entitySetConfiguration)
            .Parameter <string>("Name");

            // Action bound to a base EntityType
            entityTypeConfigurationOfEmployee.Action("IncreaseSalary")
            .Returns <int>();

            // Action bound to a derived EntityType
            entityTypeConfigurationOfManager.Action("IncreaseSalary")
            .Returns <int>();

            // Action with optional parameters
            var action = entityTypeConfigurationOfManager.Action("IncreaseWholeSalary")
                         .Returns <int>();
            action.Parameter <double>("minSalary");
            action.Parameter <double>("maxSalary").Optional();
            action.Parameter <double>("aveSalary").HasDefaultValue("8.9");

            // Action with primitive and collection of primitive parameters
            action = entityTypeConfigurationOfEmployee.Collection.Action("PrimitiveAction");
            action.Parameter <int>("param");
            action.Parameter <double?>("price");          // nullable
            action.Parameter <string>("name");            // nullable
            action.CollectionParameter <string>("names"); // collection with nullable element

            // Action with Enum and collection of Enum parameters
            action = entityTypeConfigurationOfEmployee.Collection.Action("EnumAction");
            action.Parameter <Color>("bkColor");
            action.Parameter <Color?>("frColor");         // nullable
            action.CollectionParameter <Color>("colors"); // collection with non-nullable element

            // Action with complex and collection of complex parameters
            action = entityTypeConfigurationOfEmployee.Collection.Action("ComplexAction");
            action.Parameter <Address>("address").Nullable = false;
            action.Parameter <Address>("location");            // nullable
            action.CollectionParameter <Address>("addresses"); // collection with nullable element

            // Action with entity and collection of entity parameters
            action = entityTypeConfigurationOfEmployee.Collection.Action("EntityAction");
            action.EntityParameter <Employee>("person").Nullable = false;
            action.EntityParameter <Employee>("guard");           // nullable
            action.CollectionEntityParameter <Employee>("staff"); // collection with nullable element
            #endregion

            builder.Action("ResetDataSource");

            builder.EnumType <Color>().Namespace         = "NS";
            builder.ComplexType <Address>().Namespace    = "NS";
            builder.ComplexType <SubAddress>().Namespace = "NS";
            builder.EntityType <Employee>().Namespace    = "NS";
            builder.EntityType <Manager>().Namespace     = "NS";

            return(builder.GetEdmModel());
        }
Esempio n. 23
0
        protected static IEdmModel GetEdmModel(WebRouteConfiguration configuration)
        {
            ODataModelBuilder builder = configuration.CreateConventionModelBuilder();

            return(builder.GetEdmModel());
        }