public static void SetFunctionLinkBuilder(this IEdmModel model, IEdmFunction function, FunctionLinkBuilder functionLinkBuilder) { if (model == null) { throw Error.ArgumentNull("model"); } model.SetAnnotationValue(function, functionLinkBuilder); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public static void SetFunctionLinkBuilder(this IEdmDirectValueAnnotationsManager manager, IEdmElement element, FunctionLinkBuilder value) { SetCoreAnnotation <FunctionLinkBuilder>(manager, element, value); }