示例#1
0
        public static void SetFunctionLinkBuilder(this IEdmModel model, IEdmFunction function,
                                                  FunctionLinkBuilder functionLinkBuilder)
        {
            if (model == null)
            {
                throw Error.ArgumentNull("model");
            }

            model.SetAnnotationValue(function, functionLinkBuilder);
        }
示例#2
0
        public void GetFunctionLinkBuilderForFeed_After_SetActionLinkBuilder()
        {
            // Arrange
            IEdmModel           model    = new EdmModel();
            IEdmFunction        function = new Mock <IEdmFunction>().Object;
            FunctionLinkBuilder builder  = new FunctionLinkBuilder((FeedContext _) => null, followsConventions: false);

            // Act
            model.SetFunctionLinkBuilder(function, builder);
            var result = model.GetFunctionLinkBuilder(function);

            // Assert
            Assert.Same(builder, result);
        }
示例#3
0
        public void GetFunctionLinkBuilder_ReturnsDefaultActionLinkBuilder_IfNotSet()
        {
            // Arrange
            IEdmModel         model      = new EdmModel();
            IEdmTypeReference returnType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false);
            EdmFunction       function   = new EdmFunction("NS", "Function", returnType);

            function.AddParameter("entity", new EdmEntityTypeReference(new EdmEntityType("NS", "Customer"), false));

            // Act
            FunctionLinkBuilder builder = model.GetFunctionLinkBuilder(function);

            // Assert
            Assert.NotNull(builder);
            Assert.NotNull(builder.LinkFactory);
            Assert.IsType <Func <EntityInstanceContext, Uri> >(builder.LinkFactory);

            Assert.Null(builder.FeedLinkFactory);
        }
示例#4
0
        public void Apply_Doesnot_Override_UserConfiguration()
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            var customers = builder.EntitySet <Customer>("Customers");
            var function  = customers.EntityType.Function("MyFunction").Returns <int>();

            function.HasFunctionLink(ctx => new Uri("http://localhost/FunctionTestWorks"), followsConventions: false);
            FunctionLinkGenerationConvention convention = new FunctionLinkGenerationConvention();

            convention.Apply(function, builder);

            // Act
            IEdmModel model        = builder.GetEdmModel();
            var       edmCustomers = model.EntityContainer.FindEntitySet("Customers");
            var       edmType      = model.SchemaElements.OfType <IEdmEntityType>().First(c => c.Name == "Customer");
            var       edmFunction  = model.SchemaElements.OfType <IEdmFunction>().Single(f => f.Name == "MyFunction");

            Assert.NotNull(edmFunction);

            HttpConfiguration configuration = new HttpConfiguration();

            configuration.MapODataServiceRoute(model);

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost");

            request.SetConfiguration(configuration);

            FunctionLinkBuilder fuinctionLinkBuilder = model.GetFunctionLinkBuilder(edmFunction);

            var serializerContext = new ODataSerializerContext {
                Model = model, NavigationSource = edmCustomers, Url = request.GetUrlHelper()
            };
            var entityContext = new EntityInstanceContext(serializerContext, edmType.AsReference(), new Customer {
                Id = 109
            });

            // Assert
            Uri link = fuinctionLinkBuilder.BuildFunctionLink(entityContext);

            Assert.Equal("http://localhost/FunctionTestWorks", link.AbsoluteUri);
        }
示例#5
0
        public void Apply_SetsFunctionLinkBuilder_OnlyIfFunctionIsBindable()
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            var function = builder.Function("MyFunction").Returns <int>();
            ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention();

            // Act
            convention.Apply(function, builder);

            // Assert
            IEdmModel model       = builder.GetEdmModel();
            var       edmFunction = model.EntityContainer.Elements.OfType <IEdmFunctionImport>().Single();

            Assert.NotNull(edmFunction);

            FunctionLinkBuilder linkBuilder = model.GetAnnotationValue <FunctionLinkBuilder>(edmFunction);

            Assert.Null(linkBuilder);
        }
示例#6
0
        public void Convention_GeneratesUri_ForFunctionBoundToEntity()
        {
            // Arrange
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet <Customer>("Customers");
            var function = builder.EntityType <Customer>().Function("MyFunction").Returns <int>();

            function.Parameter <string>("param");
            IEdmModel model = builder.GetEdmModel();

            // Act
            HttpConfiguration configuration = new HttpConfiguration();

            configuration.MapODataServiceRoute("odata", "odata", model);

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://*****:*****@param)",
                         link.AbsoluteUri);
        }
示例#7
0
        public static FunctionLinkBuilder GetFunctionLinkBuilder(this IEdmModel model, IEdmFunction function)
        {
            if (model == null)
            {
                throw Error.ArgumentNull("model");
            }

            if (function == null)
            {
                throw Error.ArgumentNull("function");
            }

            FunctionLinkBuilder functionLinkBuilder = model.GetAnnotationValue <FunctionLinkBuilder>(function);

            if (functionLinkBuilder == null)
            {
                if (function.Parameters != null)
                {
                    if (function.Parameters.First().Type.IsEntity())
                    {
                        functionLinkBuilder = new FunctionLinkBuilder(
                            (EntityInstanceContext entityInstanceContext) =>
                            entityInstanceContext.GenerateFunctionLink(function),
                            followsConventions: true);
                    }
                    else if (function.Parameters.First().Type.IsCollection())
                    {
                        functionLinkBuilder =
                            new FunctionLinkBuilder(
                                (FeedContext feedContext) => feedContext.GenerateFunctionLink(function),
                                followsConventions: true);
                    }
                }

                model.SetFunctionLinkBuilder(function, functionLinkBuilder);
            }

            return(functionLinkBuilder);
        }
示例#8
0
        public virtual ODataFunction CreateODataFunction(IEdmFunction function, EntityInstanceContext entityInstanceContext)
        {
            if (function == null)
            {
                throw Error.ArgumentNull("function");
            }

            if (entityInstanceContext == null)
            {
                throw Error.ArgumentNull("entityInstanceContext");
            }

            IEdmModel           model   = entityInstanceContext.EdmModel;
            FunctionLinkBuilder builder = model.GetFunctionLinkBuilder(function);

            if (builder == null)
            {
                return(null);
            }

            return(CreateODataOperation(function, builder, entityInstanceContext) as ODataFunction);
        }
示例#9
0
 public static void SetFunctionLinkBuilder(this IEdmDirectValueAnnotationsManager manager, IEdmElement element,
                                           FunctionLinkBuilder value)
 {
     SetCoreAnnotation <FunctionLinkBuilder>(manager, element, value);
 }