public static EdmModel GetModelWithIllegalActionOverloads() { EdmEntityType vegetableType = new EdmEntityType("Test", "Vegetable"); IEdmStructuralProperty id = vegetableType.AddStructuralProperty("ID", EdmCoreModel.Instance.GetInt32(false)); vegetableType.AddKeys(id); EdmEntityContainer container = new EdmEntityContainer("Test", "Container"); var set = container.AddEntitySet("Vegetables", vegetableType); var action1 = new EdmAction("Test", "Action", new EdmEntityTypeReference(vegetableType, true), true /*isBound*/, null /*entitySetPath*/); action1.AddParameter("p1", new EdmEntityTypeReference(vegetableType, false)); container.AddActionImport("Action", action1, new EdmPathExpression("Vegetables")); var action2 = new EdmAction("Test", "Action", new EdmEntityTypeReference(vegetableType, true), true /*isBound*/, null /*entitySetPath*/); action2.AddParameter("p1", new EdmEntityTypeReference(vegetableType, false)); action2.AddParameter("p2", EdmCoreModel.Instance.GetInt32(false)); container.AddActionImport("Action", action2, new EdmPathExpression("Vegetables")); EdmModel model = new EdmModel(); model.AddElement(container); model.AddElement(vegetableType); model.AddElement(action1); model.AddElement(action2); return(model); }
internal void AddAction(Action action) { EdmAction edmAction; EdmEntityContainer entityContainer = (EdmEntityContainer)EntityContainer; IEdmTypeReference edmTypeReference = GetNotEntityTypeReference(action.ReturnType); if (edmTypeReference == null) { edmTypeReference = GetCollectionNotEntityTypeReference(action.ReturnType); } if (edmTypeReference != null) { edmAction = new EdmAction(DefaultNamespace, action.Name, edmTypeReference); entityContainer.AddActionImport(edmAction); } else if (action.ReturnType == typeof(void)) { edmAction = new EdmAction(DefaultNamespace, action.Name, null); entityContainer.AddActionImport(edmAction); } else { IEdmTypeReference returnEdmTypeReference = GetEdmTypeReference(action.ReturnType, out IEdmEntityType returnEntityType, out bool isCollection); if (returnEntityType == null) { throw new ArgumentNullException("Тип возвращаемого результата action не найден в модели OData."); } edmAction = new EdmAction(DefaultNamespace, action.Name, returnEdmTypeReference); edmAction.AddParameter("bindingParameter", returnEdmTypeReference); entityContainer.AddActionImport(action.Name, edmAction, new EdmEntitySetReferenceExpression(GetEdmEntitySet(returnEntityType))); } AddElement(edmAction); foreach (var parameter in action.ParametersTypes.Keys) { Type paramType = action.ParametersTypes[parameter]; edmTypeReference = GetEdmTypeReference(paramType, out IEdmEntityType entityType, out bool isCollection); if (edmTypeReference == null) { edmTypeReference = GetNotEntityTypeReference(paramType); if (edmTypeReference == null) { edmTypeReference = GetCollectionNotEntityTypeReference(paramType); } } if (edmTypeReference != null) { edmAction.AddParameter(parameter, edmTypeReference); } } }
private static IEdmEntitySetBase GetTargetEntitySet(EdmPathExpression edmPathExpression, out IEdmEntitySet targetEntitySet, bool addParameters = false, bool isBindable = true) { var model = new EdmModel(); var container = new EdmEntityContainer("Fake", "Container"); model.AddElement(container); var edmEntityType = new EdmEntityType("Fake", "EntityType"); var sourceEntitySet = container.AddEntitySet("SourceEntitySet", edmEntityType); var middleEntitySet = container.AddEntitySet("MiddleEntitySet", edmEntityType); targetEntitySet = container.AddEntitySet("TargetEntitySet", edmEntityType); var nav1 = edmEntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo { Name = "Navigation1", Target = edmEntityType, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }); var nav2 = edmEntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo { Name = "Navigation2", Target = edmEntityType, TargetMultiplicity = EdmMultiplicity.Many }); sourceEntitySet.AddNavigationTarget(nav1, middleEntitySet); middleEntitySet.AddNavigationTarget(nav2, targetEntitySet); var action = new EdmAction("Fake", "FakeAction", new EdmEntityTypeReference(edmEntityType, false), isBindable, null /*EntitySetPath*/); if (addParameters) { action.AddParameter("p1", new EdmEntityTypeReference(edmEntityType, false)); action.AddParameter("p2", new EdmEntityTypeReference(edmEntityType, false)); } var actionImport = container.AddActionImport("FakeAction", action, edmPathExpression); return(actionImport.GetTargetEntitySet(sourceEntitySet, model)); }
/// <summary> /// Adds the function and function import. /// </summary> /// <param name="container">The container.</param> /// <param name="model">The model.</param> /// <param name="name">The name.</param> /// <param name="returnType">Type of the return.</param> /// <param name="entitySet">The entity set.</param> /// <param name="isBound">if set to <c>true</c> [is bound].</param> /// <returns>Returns the function import created.</returns> public static EdmActionImport AddActionAndActionImport(this EdmEntityContainer container, EdmModel model, string name, IEdmTypeReference returnType, IEdmExpression entitySet, bool isBound) { EdmAction action = new EdmAction(container.Namespace, name, returnType, isBound, null); model.AddElement(action); return(container.AddActionImport(name, action, entitySet)); }
public void ParseODataUriTemplate_ForActionImport() { // Arrange EdmAction setSalaray = new EdmAction("NS", "SetWholeSalaryImport", IntType, isBound: false, entitySetPathExpression: null); setSalaray.AddParameter("minSalary", IntType); setSalaray.AddOptionalParameter("maxSalary", IntType); setSalaray.AddOptionalParameter("aveSalary", IntType, "129"); _edmModel.AddElement(setSalaray); EdmEntityContainer container = _edmModel.SchemaElements.OfType <EdmEntityContainer>().First(); container.AddActionImport(setSalaray); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, "SetWholeSalaryImport", null); // Assert Assert.NotNull(path); ODataSegmentTemplate segmentTemplate = Assert.Single(path); ActionImportSegmentTemplate actionImportSegment = Assert.IsType <ActionImportSegmentTemplate>(segmentTemplate); Assert.Equal("SetWholeSalaryImport", actionImportSegment.ActionImport.Name); }
private static IEdmModel GetEdmModel() { EdmModel model = new EdmModel(); IEdmTypeReference returnType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false); IEdmTypeReference stringType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, isNullable: false); IEdmTypeReference intType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Int32, isNullable: false); EdmEntityContainer container = new EdmEntityContainer("NS", "Default"); EdmFunction calcByRating1 = new EdmFunction("NS", "CalcByRating", returnType, false, entitySetPathExpression: null, isComposable: false); calcByRating1.AddParameter("order", intType); model.AddElement(calcByRating1); container.AddFunctionImport(calcByRating1); EdmFunction calcByRating2 = new EdmFunction("NS", "CalcByRating", returnType, false, entitySetPathExpression: null, isComposable: false); calcByRating2.AddParameter("name", stringType); model.AddElement(calcByRating2); container.AddFunctionImport(calcByRating2); EdmAction calcByRatingAction = new EdmAction("NS", "CalcByRatingAction", returnType, false, null); calcByRatingAction.AddParameter("name", stringType); model.AddElement(calcByRatingAction); container.AddActionImport(calcByRatingAction); model.AddElement(container); return(model); }
public static IEdmModel GetModelWithMixedActionsAndFunctionsWithSameName() { EdmEntityType vegetableType = new EdmEntityType("Test", "Vegetable"); IEdmStructuralProperty id = vegetableType.AddStructuralProperty("ID", EdmCoreModel.Instance.GetInt32(false)); vegetableType.AddKeys(id); EdmEntityContainer container = new EdmEntityContainer("Test", "Container"); var set = container.AddEntitySet("Vegetables", vegetableType); var action1 = new EdmAction("Test", "Foo", new EdmEntityTypeReference(vegetableType, true), false /*isBound*/, null /*entitySetPath*/); action1.AddParameter("p1", new EdmEntityTypeReference(vegetableType, false)); container.AddActionImport("Foo", action1, new EdmPathExpression("Vegetables")); var function1 = new EdmFunction("Test", "Foo", new EdmEntityTypeReference(vegetableType, true), false /*isBound*/, null, true); function1.AddParameter("p1", new EdmEntityTypeReference(vegetableType, false)); function1.AddParameter("p2", EdmCoreModel.Instance.GetInt32(false)); container.AddFunctionImport("Foo", function1, new EdmPathExpression("Vegetables")); EdmModel model = new EdmModel(); model.AddElement(container); model.AddElement(vegetableType); model.AddElement(action1); model.AddElement(function1); return(model); }
public void EnsureActionImportIsAddedAndWithCorrectSuppliedName() { EdmEntityContainer container = new EdmEntityContainer("Default", "Container"); EdmAction action = new EdmAction("DS", "TestAction", EdmCoreModel.Instance.GetBoolean(false)); var actionImport = container.AddActionImport("OtherName", action); Assert.Same(action, actionImport.Action); Assert.Equal("OtherName", actionImport.Name); Assert.Same(actionImport, container.Elements.ToArray()[0]); }
public void EnsureActionImportIsAddedWithActionSuppliedName() { EdmEntityContainer container = new EdmEntityContainer("Default", "Container"); EdmAction action = new EdmAction("DS", "TestAction", EdmCoreModel.Instance.GetBoolean(false)); var actionImport = container.AddActionImport(action); actionImport.Action.Should().Be(action); actionImport.Name.Should().Be(action.Name); container.Elements.ToArray()[0].Should().Be(actionImport); }
public void EnsureFunctionImportIsAddedAndWithCorrectEntitySetExpression() { EdmEntityContainer container = new EdmEntityContainer("Default", "Container"); EdmAction action = new EdmAction("DS", "TestAction", EdmCoreModel.Instance.GetBoolean(false)); var entitySetExpression = new EdmPathExpression("EntitySet"); var functionImport = container.AddActionImport("OtherName", action, entitySetExpression); functionImport.Action.Should().Be(action); functionImport.Name.Should().Be("OtherName"); functionImport.EntitySet.Should().Be(entitySetExpression); container.Elements.ToArray()[0].Should().Be(functionImport); }
public static IEdmModel GetModelFunctionsOnNonEntityTypes() { EdmComplexType colorInfoType = new EdmComplexType("Test", "ColorInfo"); colorInfoType.AddProperty(new EdmStructuralProperty(colorInfoType, "Red", EdmCoreModel.Instance.GetInt32(false))); colorInfoType.AddProperty(new EdmStructuralProperty(colorInfoType, "Green", EdmCoreModel.Instance.GetInt32(false))); colorInfoType.AddProperty(new EdmStructuralProperty(colorInfoType, "Blue", EdmCoreModel.Instance.GetInt32(false))); EdmEntityType vegetableType = new EdmEntityType("Test", "Vegetable"); IEdmStructuralProperty id = vegetableType.AddStructuralProperty("ID", EdmCoreModel.Instance.GetInt32(false)); vegetableType.AddKeys(id); vegetableType.AddStructuralProperty("Color", new EdmComplexTypeReference(colorInfoType, false)); EdmEntityContainer container = new EdmEntityContainer("Test", "Container"); var set = container.AddEntitySet("Vegetables", vegetableType); var function1 = new EdmFunction("Test", "IsPrime", EdmCoreModel.Instance.GetBoolean(false), true, null, true); function1.AddParameter("integer", EdmCoreModel.Instance.GetInt32(false)); container.AddFunctionImport("IsPrime", function1); var action = new EdmAction("Test", "Subtract", EdmCoreModel.Instance.GetInt32(false), true /*isBound*/, null /*entitySetPath*/); action.AddParameter("integer", EdmCoreModel.Instance.GetInt32(false)); container.AddActionImport(action); var function2 = new EdmFunction("Test", "IsDark", EdmCoreModel.Instance.GetBoolean(false), true, null, true); function2.AddParameter("color", new EdmComplexTypeReference(colorInfoType, false)); container.AddFunctionImport("IsDark", function2); var function3 = new EdmFunction("Test", "IsDarkerThan", EdmCoreModel.Instance.GetBoolean(false), true, null, true); function3.AddParameter("color", new EdmComplexTypeReference(colorInfoType, false)); function3.AddParameter("other", new EdmComplexTypeReference(colorInfoType, true)); container.AddFunctionImport("IsDarkerThan", function3); var function4 = new EdmFunction("Test", "GetMostPopularVegetableWithThisColor", new EdmEntityTypeReference(vegetableType, true), true, new EdmPathExpression("color"), true); function4.AddParameter("color", new EdmComplexTypeReference(colorInfoType, false)); EdmModel model = new EdmModel(); model.AddElement(container); model.AddElement(vegetableType); model.AddElement(action); model.AddElement(function1); model.AddElement(function2); model.AddElement(function3); model.AddElement(function4); return(model); }
private IEdmModel CreateTestModel() { EdmModel model = new EdmModel(); EdmEntityContainer defaultContainer = new EdmEntityContainer("TestModel", "Default"); model.AddElement(defaultContainer); var productType = new EdmEntityType("TestModel", "Product"); EdmStructuralProperty idProperty = new EdmStructuralProperty(productType, "Id", EdmCoreModel.Instance.GetInt32(false)); productType.AddProperty(idProperty); productType.AddKeys(idProperty); productType.AddProperty(new EdmStructuralProperty(productType, "Name", EdmCoreModel.Instance.GetString(true))); model.AddElement(productType); var customerType = new EdmEntityType("TestModel", "Customer"); idProperty = new EdmStructuralProperty(customerType, "Id", EdmCoreModel.Instance.GetInt32(false)); customerType.AddProperty(idProperty); customerType.AddKeys(idProperty); customerType.AddProperty(new EdmStructuralProperty(customerType, "Name", EdmCoreModel.Instance.GetString(true))); model.AddElement(productType); defaultContainer.AddEntitySet("Products", productType); defaultContainer.AddEntitySet("Customers", customerType); defaultContainer.AddSingleton("SingleProduct", productType); defaultContainer.AddSingleton("SingleCustomer", customerType); EdmAction action = new EdmAction("TestModel", "SimpleAction", null /*returnType*/, false /*isBound*/, null /*entitySetPath*/); model.AddElement(action); defaultContainer.AddActionImport("SimpleActionImport", action); EdmFunction function1 = new EdmFunction("TestModel", "SimpleFunction1", EdmCoreModel.Instance.GetInt32(false), false /*isbound*/, null, true); function1.AddParameter("p1", EdmCoreModel.Instance.GetInt32(false)); defaultContainer.AddFunctionImport("SimpleFunctionImport1", function1); EdmFunction function2 = new EdmFunction("TestModel", "SimpleFunction2", EdmCoreModel.Instance.GetInt32(false), false /*isbound*/, null, true); function2.AddParameter("p1", EdmCoreModel.Instance.GetInt32(false)); defaultContainer.AddFunctionImport("SimpleFunctionImport2", function2, null, true /*IncludeInServiceDocument*/); // Parameterless unbound function. EdmFunction function3 = new EdmFunction("TestModel", "SimpleFunction3", EdmCoreModel.Instance.GetInt32(false), false /*isbound*/, null, true); defaultContainer.AddFunctionImport("SimpleFunctionImport3", function3, null, true /*IncludeInServiceDocument*/); return(model); }
static ODataJsonLightEntryAndFeedDeserializerTests() { EdmModel tmpModel = new EdmModel(); EdmComplexType complexType = new EdmComplexType("TestNamespace", "TestComplexType"); complexType.AddProperty(new EdmStructuralProperty(complexType, "StringProperty", EdmCoreModel.Instance.GetString(false))); tmpModel.AddElement(complexType); EntityType = new EdmEntityType("TestNamespace", "TestEntityType"); tmpModel.AddElement(EntityType); var keyProperty = new EdmStructuralProperty(EntityType, "ID", EdmCoreModel.Instance.GetInt32(false)); EntityType.AddKeys(new IEdmStructuralProperty[] { keyProperty }); EntityType.AddProperty(keyProperty); var defaultContainer = new EdmEntityContainer("TestNamespace", "DefaultContainer_sub"); tmpModel.AddElement(defaultContainer); EntitySet = new EdmEntitySet(defaultContainer, "TestEntitySet", EntityType); defaultContainer.AddElement(EntitySet); Action = new EdmAction("TestNamespace", "DoSomething", null, true, null); Action.AddParameter("p1", new EdmEntityTypeReference(EntityType, false)); tmpModel.AddElement(Action); ActionImport = defaultContainer.AddActionImport("DoSomething", Action); var serviceOperationFunction = new EdmFunction("TestNamespace", "ServiceOperation", EdmCoreModel.Instance.GetInt32(true)); defaultContainer.AddFunctionImport("ServiceOperation", serviceOperationFunction); tmpModel.AddElement(serviceOperationFunction); tmpModel.AddElement(new EdmTerm("custom", "DateTimeOffsetAnnotation", EdmPrimitiveTypeKind.DateTimeOffset)); tmpModel.AddElement(new EdmTerm("custom", "DateAnnotation", EdmPrimitiveTypeKind.Date)); tmpModel.AddElement(new EdmTerm("custom", "TimeOfDayAnnotation", EdmPrimitiveTypeKind.TimeOfDay)); EdmModel = TestUtils.WrapReferencedModelsToMainModel("TestNamespace", "DefaultContainer", tmpModel); MessageReaderSettingsReadAndValidateCustomInstanceAnnotations = new ODataMessageReaderSettings { ShouldIncludeAnnotation = ODataUtils.CreateAnnotationFilter("*") }; MessageReaderSettingsIgnoreInstanceAnnotations = new ODataMessageReaderSettings(); }
public static EdmModel GetModelWithActionWithMissingReturnSet() { EdmEntityType vegetableType = new EdmEntityType("Test", "Vegetable"); IEdmStructuralProperty id = vegetableType.AddStructuralProperty("ID", EdmCoreModel.Instance.GetInt32(false)); vegetableType.AddKeys(id); EdmAction action = new EdmAction("Test", "ActionWithMissingReturnSet", new EdmEntityTypeReference(vegetableType, true)); // Note how the entity set expression is null even though it returns an entity EdmEntityContainer container = new EdmEntityContainer("Test", "Container"); container.AddActionImport("ActionWithMissingReturnSet", action); EdmModel model = new EdmModel(); model.AddElement(container); model.AddElement(vegetableType); model.AddElement(action); return(model); }
public static IEdmModel CreateModel(string ns) { EdmModel model = new EdmModel(); var defaultContainer = new EdmEntityContainer(ns, "DefaultContainer"); model.AddElement(defaultContainer); var nameType = new EdmTypeDefinition(ns, "Name", EdmPrimitiveTypeKind.String); model.AddElement(nameType); var addressType = new EdmComplexType(ns, "Address"); addressType.AddProperty(new EdmStructuralProperty(addressType, "Road", new EdmTypeDefinitionReference(nameType, false))); addressType.AddProperty(new EdmStructuralProperty(addressType, "City", EdmCoreModel.Instance.GetString(false))); model.AddElement(addressType); var personType = new EdmEntityType(ns, "Person"); var personIdProperty = new EdmStructuralProperty(personType, "PersonId", EdmCoreModel.Instance.GetInt32(false)); personType.AddProperty(personIdProperty); personType.AddKeys(new IEdmStructuralProperty[] { personIdProperty }); personType.AddProperty(new EdmStructuralProperty(personType, "FirstName", new EdmTypeDefinitionReference(nameType, false))); personType.AddProperty(new EdmStructuralProperty(personType, "LastName", new EdmTypeDefinitionReference(nameType, false))); personType.AddProperty(new EdmStructuralProperty(personType, "Address", new EdmComplexTypeReference(addressType, true))); personType.AddProperty(new EdmStructuralProperty(personType, "Descriptions", new EdmCollectionTypeReference(new EdmCollectionType(new EdmTypeDefinitionReference(nameType, false))))); model.AddElement(personType); var peopleSet = new EdmEntitySet(defaultContainer, "People", personType); defaultContainer.AddElement(peopleSet); var numberComboType = new EdmComplexType(ns, "NumberCombo"); numberComboType.AddProperty(new EdmStructuralProperty(numberComboType, "Small", model.GetUInt16(ns, false))); numberComboType.AddProperty(new EdmStructuralProperty(numberComboType, "Middle", model.GetUInt32(ns, false))); numberComboType.AddProperty(new EdmStructuralProperty(numberComboType, "Large", model.GetUInt64(ns, false))); model.AddElement(numberComboType); var productType = new EdmEntityType(ns, "Product"); var productIdProperty = new EdmStructuralProperty(productType, "ProductId", model.GetUInt16(ns, false)); productType.AddProperty(productIdProperty); productType.AddKeys(new IEdmStructuralProperty[] { productIdProperty }); productType.AddProperty(new EdmStructuralProperty(productType, "Quantity", model.GetUInt32(ns, false))); productType.AddProperty(new EdmStructuralProperty(productType, "NullableUInt32", model.GetUInt32(ns, true))); productType.AddProperty(new EdmStructuralProperty(productType, "LifeTimeInSeconds", model.GetUInt64(ns, false))); productType.AddProperty(new EdmStructuralProperty(productType, "TheCombo", new EdmComplexTypeReference(numberComboType, true))); productType.AddProperty(new EdmStructuralProperty(productType, "LargeNumbers", new EdmCollectionTypeReference(new EdmCollectionType(model.GetUInt64(ns, false))))); model.AddElement(productType); var productsSet = new EdmEntitySet(defaultContainer, "Products", productType); defaultContainer.AddElement(productsSet); //Bound Function: bound to entity, return defined type var getFullNameFunction = new EdmFunction(ns, "GetFullName", new EdmTypeDefinitionReference(nameType, false), true, null, false); getFullNameFunction.AddParameter("person", new EdmEntityTypeReference(personType, false)); getFullNameFunction.AddParameter("nickname", new EdmTypeDefinitionReference(nameType, false)); model.AddElement(getFullNameFunction); //Bound Action: bound to entity, return UInt64 var extendLifeTimeAction = new EdmAction(ns, "ExtendLifeTime", model.GetUInt64(ns, false), true, null); extendLifeTimeAction.AddParameter("product", new EdmEntityTypeReference(productType, false)); extendLifeTimeAction.AddParameter("seconds", model.GetUInt32(ns, false)); model.AddElement(extendLifeTimeAction); //UnBound Action: ResetDataSource var resetDataSourceAction = new EdmAction(ns, "ResetDataSource", null, false, null); model.AddElement(resetDataSourceAction); defaultContainer.AddActionImport(resetDataSourceAction); IEnumerable <EdmError> errors = null; model.Validate(out errors); return(model); }
public static IEdmModel GetEdmModel1() { EdmModel model = new EdmModel(); // Complex Type EdmComplexType address = new EdmComplexType("WebApiDocNS", "Address"); address.AddStructuralProperty("Country", EdmPrimitiveTypeKind.String); address.AddStructuralProperty("City", EdmPrimitiveTypeKind.String); model.AddElement(address); EdmComplexType subAddress = new EdmComplexType("WebApiDocNS", "SubAddress", address); subAddress.AddStructuralProperty("Street", EdmPrimitiveTypeKind.String); model.AddElement(subAddress); // Enum type EdmEnumType color = new EdmEnumType("WebApiDocNS", "Color"); color.AddMember(new EdmEnumMember(color, "Red", new EdmEnumMemberValue(0))); color.AddMember(new EdmEnumMember(color, "Blue", new EdmEnumMemberValue(1))); color.AddMember(new EdmEnumMember(color, "Green", new EdmEnumMemberValue(2))); model.AddElement(color); // Entity type EdmEntityType customer = new EdmEntityType("WebApiDocNS", "Customer"); customer.AddKeys(customer.AddStructuralProperty("CustomerId", EdmPrimitiveTypeKind.Int32)); customer.AddStructuralProperty("Location", new EdmComplexTypeReference(address, isNullable: true)); model.AddElement(customer); EdmEntityType vipCustomer = new EdmEntityType("WebApiDocNS", "VipCustomer", customer); vipCustomer.AddStructuralProperty("FavoriteColor", new EdmEnumTypeReference(color, isNullable: false)); model.AddElement(vipCustomer); EdmEntityType order = new EdmEntityType("WebApiDocNS", "Order"); order.AddKeys(order.AddStructuralProperty("OrderId", EdmPrimitiveTypeKind.Int32)); order.AddStructuralProperty("Token", EdmPrimitiveTypeKind.Guid); model.AddElement(order); EdmEntityContainer container = new EdmEntityContainer("WebApiDocNS", "Container"); EdmEntitySet customers = container.AddEntitySet("Customers", customer); EdmEntitySet orders = container.AddEntitySet("Orders", order); model.AddElement(container); // EdmSingleton mary = container.AddSingleton("Mary", customer); // navigation properties EdmNavigationProperty ordersNavProp = customer.AddUnidirectionalNavigation( new EdmNavigationPropertyInfo { Name = "Orders", TargetMultiplicity = EdmMultiplicity.Many, Target = order }); customers.AddNavigationTarget(ordersNavProp, orders); // function IEdmTypeReference stringType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, isNullable: false); IEdmTypeReference intType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Int32, isNullable: false); EdmFunction getFirstName = new EdmFunction("WebApiDocNS", "GetFirstName", stringType, isBound: true, entitySetPathExpression: null, isComposable: false); getFirstName.AddParameter("entity", new EdmEntityTypeReference(customer, false)); model.AddElement(getFirstName); EdmFunction getNumber = new EdmFunction("WebApiDocNS", "GetOrderCount", intType, isBound: false, entitySetPathExpression: null, isComposable: false); model.AddElement(getNumber); container.AddFunctionImport("GetOrderCount", getNumber); // action EdmAction calculate = new EdmAction("WebApiDocNS", "CalculateOrderPrice", returnType: null, isBound: true, entitySetPathExpression: null); calculate.AddParameter("entity", new EdmEntityTypeReference(customer, false)); model.AddElement(calculate); EdmAction change = new EdmAction("WebApiDocNS", "ChangeCustomerById", returnType: null, isBound: false, entitySetPathExpression: null); change.AddParameter("Id", intType); model.AddElement(change); container.AddActionImport("ChangeCustomerById", change); return(model); }
public EdmModel BuildEdmModel(params IEdmModel[] refModels) { AddOperations(); Dictionary <Type, EntityTypeInfo> entityTypeInfos = BuildEntityTypes(refModels); foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { if (!typeInfo.IsRefModel) { typeInfo.BuildProperties(entityTypeInfos, _enumTypes, _complexTypes); } } foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { if (!typeInfo.IsRefModel) { foreach (FKeyInfo fkeyInfo in typeInfo.NavigationClrProperties) { fkeyInfo.BuildNavigationProperty(); } } } var edmModel = new EdmModel(false); edmModel.AddElements(_enumTypes.Values); foreach (KeyValuePair <Type, EdmEnumType> enumType in _enumTypes) { edmModel.SetClrType(enumType.Value, enumType.Key); } edmModel.AddElements(_complexTypes.Values); foreach (KeyValuePair <Type, EdmComplexType> complexType in _complexTypes) { edmModel.SetClrType(complexType.Value, complexType.Key); } var container = new EdmEntityContainer(_dataAdapter.DataContextType.Namespace, _dataAdapter.DataContextType.Name); edmModel.SetDataAdapter(container, _dataAdapter); var entitySets = new Dictionary <IEdmEntityType, EdmEntitySet>(entityTypeInfos.Count); foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { if (!typeInfo.IsRefModel) { edmModel.AddElement(typeInfo.EdmType); edmModel.SetClrType(typeInfo.EdmType, typeInfo.ClrType); } Db.OeEntitySetAdapter entitySetAdapter = _dataAdapter.EntitySetAdapters.Find(typeInfo.ClrType); if (entitySetAdapter != null) { EdmEntitySet entitySet = container.AddEntitySet(entitySetAdapter.EntitySetName, typeInfo.EdmType); edmModel.SetEntitySetAdapter(entitySet, entitySetAdapter); entitySets.Add(typeInfo.EdmType, entitySet); } } var manyToManyBuilder = new ManyToManyBuilder(edmModel, _metadataProvider, entityTypeInfos); foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { if (!typeInfo.IsRefModel) { foreach (FKeyInfo fkeyInfo in typeInfo.NavigationClrProperties) { EdmEntitySet principal = entitySets[fkeyInfo.PrincipalInfo.EdmType]; EdmEntitySet dependent = entitySets[fkeyInfo.DependentInfo.EdmType]; if (fkeyInfo.DependentNavigationProperty == null) { principal.AddNavigationTarget(fkeyInfo.EdmNavigationProperty, dependent); } else { dependent.AddNavigationTarget(fkeyInfo.EdmNavigationProperty, principal); if (fkeyInfo.EdmNavigationProperty.Partner != null) { principal.AddNavigationTarget(fkeyInfo.EdmNavigationProperty.Partner, dependent); } } } manyToManyBuilder.Build(typeInfo); } } foreach (OeOperationConfiguration operationConfiguration in _operationConfigurations) { if (operationConfiguration.IsEdmFunction) { EdmFunction edmFunction = BuildFunction(operationConfiguration, entityTypeInfos); edmModel.AddElement(edmFunction); if (edmFunction.IsBound) { edmModel.SetMethodInfo(edmFunction, operationConfiguration.MethodInfo); } else { container.AddFunctionImport(operationConfiguration.ImportName, edmFunction, edmFunction.EntitySetPath); edmModel.SetIsDbFunction(edmFunction, operationConfiguration.IsDbFunction); } } else { EdmAction edmAction = BuildAction(operationConfiguration, entityTypeInfos); edmModel.AddElement(edmAction); container.AddActionImport(operationConfiguration.ImportName, edmAction); edmModel.SetIsDbFunction(edmAction, operationConfiguration.IsDbFunction); } } edmModel.AddElement(container); _dataAdapter.SetEdmModel(edmModel); foreach (IEdmModel refModel in refModels) { edmModel.AddReferencedModel(refModel); } return(edmModel); }
private static IEdmModel BuildModel() { EdmModel model = new EdmModel(); var movieType = new EdmEntityType("TestModel", "Movie"); EdmStructuralProperty idProperty = new EdmStructuralProperty(movieType, "Id", EdmCoreModel.Instance.GetInt32(false)); movieType.AddProperty(idProperty); movieType.AddKeys(idProperty); movieType.AddProperty(new EdmStructuralProperty(movieType, "Name", EdmCoreModel.Instance.GetString(true))); model.AddElement(movieType); var tvMovieType = new EdmEntityType("TestModel", "TVMovie", movieType); tvMovieType.AddProperty(new EdmStructuralProperty(tvMovieType, "Channel", EdmCoreModel.Instance.GetString(false))); model.AddElement(tvMovieType); EdmEntityContainer defaultContainer = new EdmEntityContainer("TestModel", "Default"); defaultContainer.AddEntitySet("Movies", movieType); model.AddElement(defaultContainer); EdmAction simpleAction = new EdmAction("TestModel", "SimpleAction", null /*returnType*/, false /*isBound*/, null /*entitySetPath*/); model.AddElement(simpleAction); defaultContainer.AddActionImport(simpleAction); EdmAction checkoutAction1 = new EdmAction("TestModel", "Checkout", EdmCoreModel.Instance.GetInt32(false), false /*isBound*/, null /*entitySetPath*/); checkoutAction1.AddParameter("movie", movieType.ToTypeReference()); checkoutAction1.AddParameter("duration", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(checkoutAction1); EdmAction rateAction1 = new EdmAction("TestModel", "Rate", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); rateAction1.AddParameter("movie", movieType.ToTypeReference()); rateAction1.AddParameter("rating", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(rateAction1); EdmAction changeChannelAction1 = new EdmAction("TestModel", "ChangeChannel", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); changeChannelAction1.AddParameter("movie", tvMovieType.ToTypeReference()); changeChannelAction1.AddParameter("channel", EdmCoreModel.Instance.GetString(false)); model.AddElement(changeChannelAction1); EdmAction checkoutAction = new EdmAction("TestModel", "Checkout", EdmCoreModel.Instance.GetInt32(false) /*returnType*/, false /*isBound*/, null /*entitySetPath*/); checkoutAction.AddParameter("movie", movieType.ToTypeReference()); checkoutAction.AddParameter("duration", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(checkoutAction); var movieCollectionTypeReference = (new EdmCollectionType(movieType.ToTypeReference(nullable: false))).ToTypeReference(nullable: false); EdmAction checkoutMultiple1Action = new EdmAction("TestModel", "CheckoutMultiple", EdmCoreModel.Instance.GetInt32(false), false /*isBound*/, null /*entitySetPath*/); checkoutMultiple1Action.AddParameter("movies", movieCollectionTypeReference); checkoutMultiple1Action.AddParameter("duration", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(checkoutMultiple1Action); EdmAction rateMultiple1Action = new EdmAction("TestModel", "RateMultiple", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); rateMultiple1Action.AddParameter("movies", movieCollectionTypeReference); rateMultiple1Action.AddParameter("rating", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(rateMultiple1Action); EdmAction checkoutMultiple2Action = new EdmAction("TestModel", "CheckoutMultiple", EdmCoreModel.Instance.GetInt32(false) /*returnType*/, false /*isBound*/, null /*entitySetPath*/); checkoutMultiple2Action.AddParameter("movies", movieCollectionTypeReference); checkoutMultiple2Action.AddParameter("duration", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(checkoutMultiple2Action); EdmAction rateMultiple2Action = new EdmAction("TestModel", "RateMultiple", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); rateMultiple2Action.AddParameter("movies", movieCollectionTypeReference); rateMultiple2Action.AddParameter("rating", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(rateMultiple2Action); return(model); }
public static IEdmModel CreateTripPinServiceModel(string ns) { EdmModel model = new EdmModel(); var defaultContainer = new EdmEntityContainer(ns, "DefaultContainer"); model.AddElement(defaultContainer); var genderType = new EdmEnumType(ns, "PersonGender", isFlags: false); genderType.AddMember("Male", new EdmIntegerConstant(0)); genderType.AddMember("Female", new EdmIntegerConstant(1)); genderType.AddMember("Unknown", new EdmIntegerConstant(2)); model.AddElement(genderType); var cityType = new EdmComplexType(ns, "City"); cityType.AddProperty(new EdmStructuralProperty(cityType, "CountryRegion", EdmCoreModel.Instance.GetString(false))); cityType.AddProperty(new EdmStructuralProperty(cityType, "Name", EdmCoreModel.Instance.GetString(false))); cityType.AddProperty(new EdmStructuralProperty(cityType, "Region", EdmCoreModel.Instance.GetString(false))); model.AddElement(cityType); var locationType = new EdmComplexType(ns, "Location", null, false, true); locationType.AddProperty(new EdmStructuralProperty(locationType, "Address", EdmCoreModel.Instance.GetString(false))); locationType.AddProperty(new EdmStructuralProperty(locationType, "City", new EdmComplexTypeReference(cityType, false))); model.AddElement(locationType); var eventLocationType = new EdmComplexType(ns, "EventLocation", locationType, false, true); eventLocationType.AddProperty(new EdmStructuralProperty(eventLocationType, "BuildingInfo", EdmCoreModel.Instance.GetString(true))); model.AddElement(eventLocationType); var airportLocationType = new EdmComplexType(ns, "AirportLocation", locationType, false, true); airportLocationType.AddProperty(new EdmStructuralProperty(airportLocationType, "Loc", EdmCoreModel.Instance.GetSpatial(EdmPrimitiveTypeKind.GeographyPoint, false))); model.AddElement(airportLocationType); var photoType = new EdmEntityType(ns, "Photo", null, false, false, true); var photoIdProperty = new EdmStructuralProperty(photoType, "Id", EdmCoreModel.Instance.GetInt64(false)); photoType.AddProperty(photoIdProperty); photoType.AddKeys(photoIdProperty); photoType.AddProperty(new EdmStructuralProperty(photoType, "Name", EdmCoreModel.Instance.GetString(true))); model.AddElement(photoType); var photoSet = new EdmEntitySet(defaultContainer, "Photos", photoType); defaultContainer.AddElement(photoSet); var personType = new EdmEntityType(ns, "Person", null, false, /* isOpen */ true); var personIdProperty = new EdmStructuralProperty(personType, "UserName", EdmCoreModel.Instance.GetString(false)); personType.AddProperty(personIdProperty); personType.AddKeys(personIdProperty); personType.AddProperty(new EdmStructuralProperty(personType, "FirstName", EdmCoreModel.Instance.GetString(false))); personType.AddProperty(new EdmStructuralProperty(personType, "LastName", EdmCoreModel.Instance.GetString(false))); personType.AddProperty(new EdmStructuralProperty(personType, "Emails", new EdmCollectionTypeReference(new EdmCollectionType(EdmCoreModel.Instance.GetString(true))))); personType.AddProperty(new EdmStructuralProperty(personType, "AddressInfo", new EdmCollectionTypeReference(new EdmCollectionType(new EdmComplexTypeReference(locationType, true))))); personType.AddProperty(new EdmStructuralProperty(personType, "Gender", new EdmEnumTypeReference(genderType, true))); personType.AddProperty(new EdmStructuralProperty(personType, "Concurrency", EdmCoreModel.Instance.GetInt64(false))); model.AddElement(personType); var personSet = new EdmEntitySet(defaultContainer, "People", personType); defaultContainer.AddElement(personSet); var airlineType = new EdmEntityType(ns, "Airline"); var airlineCodeProp = new EdmStructuralProperty(airlineType, "AirlineCode", EdmCoreModel.Instance.GetString(false)); airlineType.AddKeys(airlineCodeProp); airlineType.AddProperty(airlineCodeProp); airlineType.AddProperty(new EdmStructuralProperty(airlineType, "Name", EdmCoreModel.Instance.GetString(false))); model.AddElement(airlineType); var airlineSet = new EdmEntitySet(defaultContainer, "Airlines", airlineType); defaultContainer.AddElement(airlineSet); var airportType = new EdmEntityType(ns, "Airport"); var airportIdType = new EdmStructuralProperty(airportType, "IcaoCode", EdmCoreModel.Instance.GetString(false)); airportType.AddProperty(airportIdType); airportType.AddKeys(airportIdType); airportType.AddProperty(new EdmStructuralProperty(airportType, "Name", EdmCoreModel.Instance.GetString(false))); airportType.AddProperty(new EdmStructuralProperty(airportType, "IataCode", EdmCoreModel.Instance.GetString(false))); airportType.AddProperty(new EdmStructuralProperty(airportType, "Location", new EdmComplexTypeReference(airportLocationType, false))); model.AddElement(airportType); var airportSet = new EdmEntitySet(defaultContainer, "Airports", airportType); defaultContainer.AddElement(airportSet); var planItemType = new EdmEntityType(ns, "PlanItem"); var planItemIdType = new EdmStructuralProperty(planItemType, "PlanItemId", EdmCoreModel.Instance.GetInt32(false)); planItemType.AddProperty(planItemIdType); planItemType.AddKeys(planItemIdType); planItemType.AddProperty(new EdmStructuralProperty(planItemType, "ConfirmationCode", EdmCoreModel.Instance.GetString(true))); planItemType.AddProperty(new EdmStructuralProperty(planItemType, "StartsAt", EdmCoreModel.Instance.GetDateTimeOffset(true))); planItemType.AddProperty(new EdmStructuralProperty(planItemType, "EndsAt", EdmCoreModel.Instance.GetDateTimeOffset(true))); planItemType.AddProperty(new EdmStructuralProperty(planItemType, "Duration", EdmCoreModel.Instance.GetDuration(true))); model.AddElement(planItemType); var publicTransportationType = new EdmEntityType(ns, "PublicTransportation", planItemType); publicTransportationType.AddProperty(new EdmStructuralProperty(publicTransportationType, "SeatNumber", EdmCoreModel.Instance.GetString(true))); model.AddElement(publicTransportationType); var flightType = new EdmEntityType(ns, "Flight", publicTransportationType); var flightNumberType = new EdmStructuralProperty(flightType, "FlightNumber", EdmCoreModel.Instance.GetString(false)); flightType.AddProperty(flightNumberType); model.AddElement(flightType); var eventType = new EdmEntityType(ns, "Event", planItemType, false, true); eventType.AddProperty(new EdmStructuralProperty(eventType, "Description", EdmCoreModel.Instance.GetString(true))); eventType.AddProperty(new EdmStructuralProperty(eventType, "OccursAt", new EdmComplexTypeReference(eventLocationType, false))); model.AddElement(eventType); var tripType = new EdmEntityType(ns, "Trip"); var tripIdType = new EdmStructuralProperty(tripType, "TripId", EdmCoreModel.Instance.GetInt32(false)); tripType.AddProperty(tripIdType); tripType.AddKeys(tripIdType); tripType.AddProperty(new EdmStructuralProperty(tripType, "ShareId", EdmCoreModel.Instance.GetGuid(true))); tripType.AddProperty(new EdmStructuralProperty(tripType, "Description", EdmCoreModel.Instance.GetString(true))); tripType.AddProperty(new EdmStructuralProperty(tripType, "Name", EdmCoreModel.Instance.GetString(false))); tripType.AddProperty(new EdmStructuralProperty(tripType, "Budget", EdmCoreModel.Instance.GetSingle(false))); tripType.AddProperty(new EdmStructuralProperty(tripType, "StartsAt", EdmCoreModel.Instance.GetDateTimeOffset(false))); tripType.AddProperty(new EdmStructuralProperty(tripType, "EndsAt", EdmCoreModel.Instance.GetDateTimeOffset(false))); tripType.AddProperty(new EdmStructuralProperty(tripType, "Tags", new EdmCollectionTypeReference(new EdmCollectionType(EdmCoreModel.Instance.GetString(false))))); model.AddElement(tripType); var friendsnNavigation = personType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Friends", Target = personType, TargetMultiplicity = EdmMultiplicity.Many }); var personTripNavigation = personType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Trips", Target = tripType, TargetMultiplicity = EdmMultiplicity.Many, ContainsTarget = true }); var personPhotoNavigation = personType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Photo", Target = photoType, TargetMultiplicity = EdmMultiplicity.ZeroOrOne, }); var tripPhotosNavigation = tripType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Photos", Target = photoType, TargetMultiplicity = EdmMultiplicity.Many, }); var tripItemNavigation = tripType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "PlanItems", Target = planItemType, ContainsTarget = true, TargetMultiplicity = EdmMultiplicity.Many }); var flightFromAirportNavigation = flightType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "From", Target = airportType, TargetMultiplicity = EdmMultiplicity.One }); var flightToAirportNavigation = flightType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "To", Target = airportType, TargetMultiplicity = EdmMultiplicity.One }); var flightAirlineNavigation = flightType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Airline", Target = airlineType, TargetMultiplicity = EdmMultiplicity.One }); var me = new EdmSingleton(defaultContainer, "Me", personType); defaultContainer.AddElement(me); personSet.AddNavigationTarget(friendsnNavigation, personSet); me.AddNavigationTarget(friendsnNavigation, personSet); personSet.AddNavigationTarget(flightAirlineNavigation, airlineSet); me.AddNavigationTarget(flightAirlineNavigation, airlineSet); personSet.AddNavigationTarget(flightFromAirportNavigation, airportSet); me.AddNavigationTarget(flightFromAirportNavigation, airportSet); personSet.AddNavigationTarget(flightToAirportNavigation, airportSet); me.AddNavigationTarget(flightToAirportNavigation, airportSet); personSet.AddNavigationTarget(personPhotoNavigation, photoSet); me.AddNavigationTarget(personPhotoNavigation, photoSet); personSet.AddNavigationTarget(tripPhotosNavigation, photoSet); me.AddNavigationTarget(tripPhotosNavigation, photoSet); var getFavoriteAirlineFunction = new EdmFunction(ns, "GetFavoriteAirline", new EdmEntityTypeReference(airlineType, false), true, new EdmPathExpression("person/Trips/PlanItems/Microsoft.OData.SampleService.Models.TripPin.Flight/Airline"), true); getFavoriteAirlineFunction.AddParameter("person", new EdmEntityTypeReference(personType, false)); model.AddElement(getFavoriteAirlineFunction); var getInvolvedPeopleFunction = new EdmFunction(ns, "GetInvolvedPeople", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(personType, false))), true, null, true); getInvolvedPeopleFunction.AddParameter("trip", new EdmEntityTypeReference(tripType, false)); model.AddElement(getInvolvedPeopleFunction); var getFriendsTripsFunction = new EdmFunction(ns, "GetFriendsTrips", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(tripType, false))), true, new EdmPathExpression("person/Friends/Trips"), true); getFriendsTripsFunction.AddParameter("person", new EdmEntityTypeReference(personType, false)); getFriendsTripsFunction.AddParameter("userName", EdmCoreModel.Instance.GetString(false)); model.AddElement(getFriendsTripsFunction); var getNearestAirport = new EdmFunction(ns, "GetNearestAirport", new EdmEntityTypeReference(airportType, false), false, null, true); getNearestAirport.AddParameter("lat", EdmCoreModel.Instance.GetDouble(false)); getNearestAirport.AddParameter("lon", EdmCoreModel.Instance.GetDouble(false)); model.AddElement(getNearestAirport); var getNearestAirportFunctionImport = (IEdmFunctionImport)defaultContainer.AddFunctionImport("GetNearestAirport", getNearestAirport, new EdmEntitySetReferenceExpression(airportSet), true); var resetDataSourceAction = new EdmAction(ns, "ResetDataSource", null, false, null); model.AddElement(resetDataSourceAction); defaultContainer.AddActionImport(resetDataSourceAction); var shareTripAction = new EdmAction(ns, "ShareTrip", null, true, null); shareTripAction.AddParameter("person", new EdmEntityTypeReference(personType, false)); shareTripAction.AddParameter("userName", EdmCoreModel.Instance.GetString(false)); shareTripAction.AddParameter("tripId", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(shareTripAction); model.SetDescriptionAnnotation(defaultContainer, "TripPin service is a sample service for OData V4."); model.SetOptimisticConcurrencyAnnotation(personSet, personType.StructuralProperties().Where(p => p.Name == "Concurrency")); // TODO: currently singleton does not support ETag feature // model.SetOptimisticConcurrencyAnnotation(me, personType.StructuralProperties().Where(p => p.Name == "Concurrency")); model.SetResourcePathCoreAnnotation(personSet, "People"); model.SetResourcePathCoreAnnotation(me, "Me"); model.SetResourcePathCoreAnnotation(airlineSet, "Airlines"); model.SetResourcePathCoreAnnotation(airportSet, "Airports"); model.SetResourcePathCoreAnnotation(photoSet, "Photos"); model.SetResourcePathCoreAnnotation(getNearestAirportFunctionImport, "Microsoft.OData.SampleService.Models.TripPin.GetNearestAirport"); model.SetDereferenceableIDsCoreAnnotation(defaultContainer, true); model.SetConventionalIDsCoreAnnotation(defaultContainer, true); model.SetPermissionsCoreAnnotation(personType.FindProperty("UserName"), CorePermission.Read); model.SetPermissionsCoreAnnotation(airlineType.FindProperty("AirlineCode"), CorePermission.Read); model.SetPermissionsCoreAnnotation(airportType.FindProperty("IcaoCode"), CorePermission.Read); model.SetPermissionsCoreAnnotation(planItemType.FindProperty("PlanItemId"), CorePermission.Read); model.SetPermissionsCoreAnnotation(tripType.FindProperty("TripId"), CorePermission.Read); model.SetPermissionsCoreAnnotation(photoType.FindProperty("Id"), CorePermission.Read); model.SetImmutableCoreAnnotation(airportType.FindProperty("IataCode"), true); model.SetComputedCoreAnnotation(personType.FindProperty("Concurrency"), true); model.SetAcceptableMediaTypesCoreAnnotation(photoType, new[] { "image/jpeg" }); model.SetConformanceLevelCapabilitiesAnnotation(defaultContainer, CapabilitiesConformanceLevelType.Advanced); model.SetSupportedFormatsCapabilitiesAnnotation(defaultContainer, new[] { "application/json;odata.metadata=full;IEEE754Compatible=false;odata.streaming=true", "application/json;odata.metadata=minimal;IEEE754Compatible=false;odata.streaming=true", "application/json;odata.metadata=none;IEEE754Compatible=false;odata.streaming=true" }); model.SetAsynchronousRequestsSupportedCapabilitiesAnnotation(defaultContainer, true); model.SetBatchContinueOnErrorSupportedCapabilitiesAnnotation(defaultContainer, false); model.SetNavigationRestrictionsCapabilitiesAnnotation(personSet, CapabilitiesNavigationType.None, new[] { new Tuple <IEdmNavigationProperty, CapabilitiesNavigationType>(friendsnNavigation, CapabilitiesNavigationType.Recursive) }); model.SetFilterFunctionsCapabilitiesAnnotation(defaultContainer, new[] { "contains", "endswith", "startswith", "length", "indexof", "substring", "tolower", "toupper", "trim", "concat", "year", "month", "day", "hour", "minute", "second", "round", "floor", "ceiling", "cast", "isof" }); model.SetSearchRestrictionsCapabilitiesAnnotation(personSet, true, CapabilitiesSearchExpressions.None); model.SetSearchRestrictionsCapabilitiesAnnotation(airlineSet, true, CapabilitiesSearchExpressions.None); model.SetSearchRestrictionsCapabilitiesAnnotation(airportSet, true, CapabilitiesSearchExpressions.None); model.SetSearchRestrictionsCapabilitiesAnnotation(photoSet, true, CapabilitiesSearchExpressions.None); model.SetInsertRestrictionsCapabilitiesAnnotation(personSet, true, new[] { personTripNavigation, friendsnNavigation }); model.SetInsertRestrictionsCapabilitiesAnnotation(airlineSet, true, null); model.SetInsertRestrictionsCapabilitiesAnnotation(airportSet, false, null); model.SetInsertRestrictionsCapabilitiesAnnotation(photoSet, true, null); // TODO: model.SetUpdateRestrictionsCapabilitiesAnnotation(); model.SetDeleteRestrictionsCapabilitiesAnnotation(airportSet, false, null); model.SetISOCurrencyMeasuresAnnotation(tripType.FindProperty("Budget"), "USD"); model.SetScaleMeasuresAnnotation(tripType.FindProperty("Budget"), 2); return(model); }
public EdmModel BuildEdmModel() { Dictionary <Type, EntityTypeInfo> entityTypeInfos = BuildEntityTypes(); foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { typeInfo.BuildProperties(entityTypeInfos, _enumTypes, _complexTypes); } foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { foreach (FKeyInfo fkeyInfo in typeInfo.NavigationClrProperties) { fkeyInfo.EdmNavigationProperty = CreateNavigationProperty(fkeyInfo); } } var edmModel = new EdmModel(); var container = new EdmEntityContainer("Default", "Container"); edmModel.AddElements(_enumTypes.Values); foreach (KeyValuePair <Type, EdmEnumType> enumType in _enumTypes) { edmModel.SetClrType(enumType.Value, enumType.Key); } edmModel.AddElements(_complexTypes.Values); foreach (KeyValuePair <Type, EdmComplexType> complexType in _complexTypes) { edmModel.SetClrType(complexType.Value, complexType.Key); } var entitySets = new Dictionary <IEdmEntityType, EdmEntitySet>(entityTypeInfos.Count); foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { edmModel.AddElement(typeInfo.EdmType); edmModel.SetClrType(typeInfo.EdmType, typeInfo.ClrType); foreach (KeyValuePair <String, Type> pair in _entitySets) { if (pair.Value == typeInfo.ClrType) { entitySets.Add(typeInfo.EdmType, container.AddEntitySet(pair.Key, typeInfo.EdmType)); break; } } } foreach (EntityTypeInfo typeInfo in entityTypeInfos.Values) { foreach (FKeyInfo fkeyInfo in typeInfo.NavigationClrProperties) { EdmEntitySet principal = entitySets[fkeyInfo.PrincipalInfo.EdmType]; EdmEntitySet dependent = entitySets[fkeyInfo.DependentInfo.EdmType]; dependent.AddNavigationTarget(fkeyInfo.EdmNavigationProperty, principal); if (fkeyInfo.EdmNavigationProperty.Partner != null) { principal.AddNavigationTarget(fkeyInfo.EdmNavigationProperty.Partner, dependent); } } } foreach (OeOperationConfiguration operationConfiguration in _operationConfigurations) { if (operationConfiguration.IsEdmFunction) { EdmFunction edmFunction = BuildFunction(operationConfiguration, entityTypeInfos); if (edmFunction != null) { edmModel.AddElement(edmFunction); container.AddFunctionImport(operationConfiguration.Name, edmFunction); edmModel.SetIsDbFunction(edmFunction, operationConfiguration.IsDbFunction); } } else { EdmAction edmAction = BuildAction(operationConfiguration, entityTypeInfos); if (edmAction != null) { edmModel.AddElement(edmAction); container.AddActionImport(operationConfiguration.Name, edmAction); edmModel.SetIsDbFunction(edmAction, operationConfiguration.IsDbFunction); } } } edmModel.AddElement(container); return(edmModel); }
/// <summary> /// Creates a new action import with the specified name. /// </summary> /// <param name="container">The <see cref="EntityContainer"/> to create the action import in.</param> /// <param name="localName">The name for the action import to create.</param> /// <returns>The newly created action import instance.</returns> public static EdmActionImport ActionImport(this EdmEntityContainer container, IEdmAction action) { ExceptionUtilities.CheckArgumentNotNull(container, "container"); return(container.AddActionImport(action)); }
public static IEdmModel CreateODataServiceModel(string ns) { EdmModel model = new EdmModel(); var defaultContainer = new EdmEntityContainer(ns, "OperationService"); model.AddElement(defaultContainer); #region ComplexType var addressType = new EdmComplexType(ns, "Address"); addressType.AddProperty(new EdmStructuralProperty(addressType, "Street", EdmCoreModel.Instance.GetString(false))); addressType.AddProperty(new EdmStructuralProperty(addressType, "City", EdmCoreModel.Instance.GetString(false))); addressType.AddProperty(new EdmStructuralProperty(addressType, "PostalCode", EdmCoreModel.Instance.GetString(false))); model.AddElement(addressType); var homeAddressType = new EdmComplexType(ns, "HomeAddress", addressType, false); homeAddressType.AddProperty(new EdmStructuralProperty(homeAddressType, "FamilyName", EdmCoreModel.Instance.GetString(true))); model.AddElement(homeAddressType); var companyAddressType = new EdmComplexType(ns, "CompanyAddress", addressType, false); companyAddressType.AddProperty(new EdmStructuralProperty(companyAddressType, "CompanyName", EdmCoreModel.Instance.GetString(false))); model.AddElement(companyAddressType); #endregion #region EnumType var customerLevelType = new EdmEnumType(ns, "CustomerLevel"); customerLevelType.AddMember("Common", new EdmIntegerConstant(0)); customerLevelType.AddMember("Silver", new EdmIntegerConstant(1)); customerLevelType.AddMember("Gold", new EdmIntegerConstant(2)); model.AddElement(customerLevelType); #endregion #region EntityType var customerType = new EdmEntityType(ns, "Customer"); var customerIdProperty = new EdmStructuralProperty(customerType, "ID", EdmCoreModel.Instance.GetInt32(false)); customerType.AddProperty(customerIdProperty); customerType.AddKeys(customerIdProperty); customerType.AddStructuralProperty("FirstName", EdmCoreModel.Instance.GetString(false)); customerType.AddStructuralProperty("LastName", EdmCoreModel.Instance.GetString(false)); customerType.AddStructuralProperty("Address", new EdmComplexTypeReference(addressType, true)); customerType.AddStructuralProperty("Emails", new EdmCollectionTypeReference(new EdmCollectionType(EdmCoreModel.Instance.GetString(true)))); customerType.AddStructuralProperty("Level", new EdmEnumTypeReference(customerLevelType, false)); model.AddElement(customerType); var orderType = new EdmEntityType(ns, "Order"); var orderIdProperty = new EdmStructuralProperty(orderType, "ID", EdmCoreModel.Instance.GetInt32(false)); orderType.AddProperty(orderIdProperty); orderType.AddKeys(orderIdProperty); orderType.AddStructuralProperty("OrderDate", EdmCoreModel.Instance.GetDateTimeOffset(false)); orderType.AddStructuralProperty("Notes", new EdmCollectionTypeReference(new EdmCollectionType(EdmCoreModel.Instance.GetString(true)))); model.AddElement(orderType); var ordersNavigation = customerType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo { Name = "Orders", Target = orderType, TargetMultiplicity = EdmMultiplicity.Many }); var customerForOrderNavigation = orderType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo { Name = "Customer", Target = customerType, TargetMultiplicity = EdmMultiplicity.One }); #endregion #region EntitySet var customerSet = new EdmEntitySet(defaultContainer, "Customers", customerType); defaultContainer.AddElement(customerSet); var orderSet = new EdmEntitySet(defaultContainer, "Orders", orderType); defaultContainer.AddElement(orderSet); customerSet.AddNavigationTarget(ordersNavigation, orderSet); orderSet.AddNavigationTarget(customerForOrderNavigation, customerSet); #endregion #region Operations //UnBound Action: ResetDataSource var resetDataSourceAction = new EdmAction(ns, "ResetDataSource", null, false, null); model.AddElement(resetDataSourceAction); defaultContainer.AddActionImport(resetDataSourceAction); var customerTypeReference = new EdmEntityTypeReference(customerType, true); var customerCollectionTypeReference = new EdmCollectionTypeReference(new EdmCollectionType(customerTypeReference)); var addressTypeReference = new EdmComplexTypeReference(addressType, true); var addressCollectionTypeRefernce = new EdmCollectionTypeReference(new EdmCollectionType(addressTypeReference)); var stringTypeReference = EdmCoreModel.Instance.GetString(true); var stringCollectionTypeReference = new EdmCollectionTypeReference(new EdmCollectionType(stringTypeReference)); var orderTypeReference = new EdmEntityTypeReference(orderType, true); var orderCollectionTypeReference = new EdmCollectionTypeReference(new EdmCollectionType(orderTypeReference)); //Bound Function : Bound to Collection Of Entity, Parameter is Complex Value, Return Entity. var getCustomerForAddressFunction = new EdmFunction(ns, "GetCustomerForAddress", customerTypeReference, true, new EdmPathExpression("customers"), true); getCustomerForAddressFunction.AddParameter("customers", customerCollectionTypeReference); getCustomerForAddressFunction.AddParameter("address", addressTypeReference); model.AddElement(getCustomerForAddressFunction); //Bound Function : Bound to Collection Of Entity, Parameter is Collection of Complex Value, Return Collection Of Entity. var getCustomersForAddressesFunction = new EdmFunction(ns, "GetCustomersForAddresses", customerCollectionTypeReference, true, new EdmPathExpression("customers"), true); getCustomersForAddressesFunction.AddParameter("customers", customerCollectionTypeReference); getCustomersForAddressesFunction.AddParameter("addresses", addressCollectionTypeRefernce); model.AddElement(getCustomersForAddressesFunction); //Bound Function : Bound to Collection Of Entity, Parameter is Collection of Complex Value, Return Entity var getCustomerForAddressesFunction = new EdmFunction(ns, "GetCustomerForAddresses", customerTypeReference, true, new EdmPathExpression("customers"), true); getCustomerForAddressesFunction.AddParameter("customers", customerCollectionTypeReference); getCustomerForAddressesFunction.AddParameter("addresses", addressCollectionTypeRefernce); model.AddElement(getCustomerForAddressesFunction); //Bound Function : Bound to Entity, Return Complex Value var getCustomerAddressFunction = new EdmFunction(ns, "GetCustomerAddress", addressTypeReference, true, null, true); getCustomerAddressFunction.AddParameter("customer", customerTypeReference); model.AddElement(getCustomerAddressFunction); //Bound Function : Bound to Entity, Parameter is Complex Value, Return Entity var verifyCustomerAddressFunction = new EdmFunction(ns, "VerifyCustomerAddress", customerTypeReference, true, new EdmPathExpression("customer"), true); verifyCustomerAddressFunction.AddParameter("customer", customerTypeReference); verifyCustomerAddressFunction.AddParameter("addresses", addressTypeReference); model.AddElement(verifyCustomerAddressFunction); //Bound Function : Bound to Entity, Parameter is Entity, Return Entity var verifyCustomerByOrderFunction = new EdmFunction(ns, "VerifyCustomerByOrder", customerTypeReference, true, new EdmPathExpression("customer"), true); verifyCustomerByOrderFunction.AddParameter("customer", customerTypeReference); verifyCustomerByOrderFunction.AddParameter("order", orderTypeReference); model.AddElement(verifyCustomerByOrderFunction); //Bound Function : Bound to Entity, Parameter is Collection of String, Return Collection of Entity var getOrdersFromCustomerByNotesFunction = new EdmFunction(ns, "GetOrdersFromCustomerByNotes", orderCollectionTypeReference, true, new EdmPathExpression("customer/Orders"), true); getOrdersFromCustomerByNotesFunction.AddParameter("customer", customerTypeReference); getOrdersFromCustomerByNotesFunction.AddParameter("notes", stringCollectionTypeReference); model.AddElement(getOrdersFromCustomerByNotesFunction); //Bound Function : Bound to Collection Of Entity, Parameter is String, Return Collection of Entity var getOrdersByNoteFunction = new EdmFunction(ns, "GetOrdersByNote", orderCollectionTypeReference, true, new EdmPathExpression("orders"), true); getOrdersByNoteFunction.AddParameter("orders", orderCollectionTypeReference); getOrdersByNoteFunction.AddParameter("note", stringTypeReference); model.AddElement(getOrdersByNoteFunction); //Bound Function : Bound to Collection Of Entity, Parameter is Collection of String, Return Entity var getOrderByNoteFunction = new EdmFunction(ns, "GetOrderByNote", orderTypeReference, true, new EdmPathExpression("orders"), true); getOrderByNoteFunction.AddParameter("orders", orderCollectionTypeReference); getOrderByNoteFunction.AddParameter("notes", stringCollectionTypeReference); model.AddElement(getOrderByNoteFunction); //Bound Function : Bound to Collection Of Entity, Parameter is Collection of Entity, Return Collection Of Entity var getCustomersByOrdersFunction = new EdmFunction(ns, "GetCustomersByOrders", customerCollectionTypeReference, true, new EdmPathExpression("customers"), true); getCustomersByOrdersFunction.AddParameter("customers", customerCollectionTypeReference); getCustomersByOrdersFunction.AddParameter("orders", orderCollectionTypeReference); model.AddElement(getCustomersByOrdersFunction); //Bound Function : Bound to Collection Of Entity, Parameter is Entity, Return Entity var getCustomerByOrderFunction = new EdmFunction(ns, "GetCustomerByOrder", customerTypeReference, true, new EdmPathExpression("customers"), true); getCustomerByOrderFunction.AddParameter("customers", customerCollectionTypeReference); getCustomerByOrderFunction.AddParameter("order", orderTypeReference); model.AddElement(getCustomerByOrderFunction); // Function Import: Parameter is Collection of Entity, Return Collection Of Entity var getCustomersByOrdersUnboundFunction = new EdmFunction(ns, "GetCustomersByOrders", customerCollectionTypeReference, false, null, true); getCustomersByOrdersUnboundFunction.AddParameter("orders", orderCollectionTypeReference); model.AddElement(getCustomersByOrdersUnboundFunction); defaultContainer.AddFunctionImport(getCustomersByOrdersUnboundFunction.Name, getCustomersByOrdersUnboundFunction, new EdmEntitySetReferenceExpression(customerSet)); // Function Import: Parameter is Collection of Entity, Return Entity var getCustomerByOrderUnboundFunction = new EdmFunction(ns, "GetCustomerByOrder", customerTypeReference, false, null, true); getCustomerByOrderUnboundFunction.AddParameter("order", orderTypeReference); model.AddElement(getCustomerByOrderUnboundFunction); defaultContainer.AddFunctionImport(getCustomerByOrderUnboundFunction.Name, getCustomerByOrderUnboundFunction, new EdmEntitySetReferenceExpression(customerSet)); // Function Import: Bound to Entity, Return Complex Value var getCustomerAddressUnboundFunction = new EdmFunction(ns, "GetCustomerAddress", addressTypeReference, false, null, true); getCustomerAddressUnboundFunction.AddParameter("customer", customerTypeReference); model.AddElement(getCustomerAddressUnboundFunction); defaultContainer.AddFunctionImport(getCustomerAddressUnboundFunction.Name, getCustomerAddressUnboundFunction); #endregion IEnumerable <EdmError> errors; model.Validate(out errors); if (errors.Any()) { throw new SystemException("The model is not valid, please correct it"); } return(model); }
public static IEdmModel CreateServiceEdmModel(string ns) { EdmModel model = new EdmModel(); var defaultContainer = new EdmEntityContainer(ns, "PerfInMemoryContainer"); model.AddElement(defaultContainer); var personType = new EdmEntityType(ns, "Person"); var personIdProperty = new EdmStructuralProperty(personType, "PersonID", EdmCoreModel.Instance.GetInt32(false)); personType.AddProperty(personIdProperty); personType.AddKeys(new IEdmStructuralProperty[] { personIdProperty }); personType.AddProperty(new EdmStructuralProperty(personType, "FirstName", EdmCoreModel.Instance.GetString(false))); personType.AddProperty(new EdmStructuralProperty(personType, "LastName", EdmCoreModel.Instance.GetString(false))); personType.AddProperty(new EdmStructuralProperty(personType, "MiddleName", EdmCoreModel.Instance.GetString(true))); personType.AddProperty(new EdmStructuralProperty(personType, "Age", EdmCoreModel.Instance.GetInt32(false))); model.AddElement(personType); var simplePersonSet = new EdmEntitySet(defaultContainer, "SimplePeopleSet", personType); defaultContainer.AddElement(simplePersonSet); var largetPersonSet = new EdmEntitySet(defaultContainer, "LargePeopleSet", personType); defaultContainer.AddElement(largetPersonSet); var addressType = new EdmComplexType(ns, "Address"); addressType.AddProperty(new EdmStructuralProperty(addressType, "Street", EdmCoreModel.Instance.GetString(false))); addressType.AddProperty(new EdmStructuralProperty(addressType, "City", EdmCoreModel.Instance.GetString(false))); addressType.AddProperty(new EdmStructuralProperty(addressType, "PostalCode", EdmCoreModel.Instance.GetString(false))); model.AddElement(addressType); var companyType = new EdmEntityType(ns, "Company"); var companyId = new EdmStructuralProperty(companyType, "CompanyID", EdmCoreModel.Instance.GetInt32(false)); companyType.AddProperty(companyId); companyType.AddKeys(companyId); companyType.AddProperty(new EdmStructuralProperty(companyType, "Name", EdmCoreModel.Instance.GetString(true))); companyType.AddProperty(new EdmStructuralProperty(companyType, "Address", new EdmComplexTypeReference(addressType, true))); companyType.AddProperty(new EdmStructuralProperty(companyType, "Revenue", EdmCoreModel.Instance.GetInt32(false))); model.AddElement(companyType); var companySet = new EdmEntitySet(defaultContainer, "CompanySet", companyType); defaultContainer.AddElement(companySet); var companyEmployeeNavigation = companyType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Employees", Target = personType, TargetMultiplicity = EdmMultiplicity.Many }); companySet.AddNavigationTarget(companyEmployeeNavigation, largetPersonSet); // ResetDataSource var resetDataSourceAction = new EdmAction(ns, "ResetDataSource", null, false, null); model.AddElement(resetDataSourceAction); defaultContainer.AddActionImport(resetDataSourceAction); return(model); }
public static TestModel Initialize() { EdmModel model = new EdmModel(); var result = new TestModel(model); var productType = new EdmEntityType("TestModel", "Product"); result.ProductType = productType; EdmStructuralProperty idProperty = new EdmStructuralProperty(productType, "Id", EdmCoreModel.Instance.GetInt32(false)); productType.AddProperty(idProperty); productType.AddKeys(idProperty); productType.AddProperty(new EdmStructuralProperty(productType, "Name", EdmCoreModel.Instance.GetString(true))); model.AddElement(productType); EdmEntityContainer defaultContainer = new EdmEntityContainer("TestModel", "Default"); result.Container = defaultContainer; result.ProductsSet = defaultContainer.AddEntitySet("Products", productType); model.AddElement(defaultContainer); var derivedProductType = new EdmEntityType("TestModel", "DerivedProduct", productType); result.DerivedProductType = derivedProductType; EdmEntityType multipleKeyType = new EdmEntityType("TestModel", "MultipleKeyType"); result.MultipleKeyType = multipleKeyType; EdmStructuralProperty keyAProperty = new EdmStructuralProperty(multipleKeyType, "KeyA", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty keyBProperty = new EdmStructuralProperty(multipleKeyType, "KeyB", EdmCoreModel.Instance.GetInt32(false)); multipleKeyType.AddProperty(keyAProperty); multipleKeyType.AddProperty(keyBProperty); multipleKeyType.AddKeys(keyAProperty, keyBProperty); model.AddElement(multipleKeyType); result.MultipleKeysSet = defaultContainer.AddEntitySet("MultipleKeySet", multipleKeyType); EdmEntityType productTypeWithNavProps = new EdmEntityType("TestModel", "ProductWithNavProps", productType); result.ProductWithNavPropsType = productTypeWithNavProps; productTypeWithNavProps.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "RelatedProducts", Target = productType, TargetMultiplicity = EdmMultiplicity.Many }); productTypeWithNavProps.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "RelatedDerivedProduct", Target = derivedProductType, TargetMultiplicity = EdmMultiplicity.One }); model.AddElement(productTypeWithNavProps); EdmAction action = new EdmAction("TestModel", "SimpleAction", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); model.AddElement(action); defaultContainer.AddActionImport("SimpleAction", action); EdmAction action1 = new EdmAction("TestModel", "SimpleFunctionWithOverload", EdmCoreModel.Instance.GetInt32(false), true /*isbound*/, null); action1.AddParameter("p1", EdmCoreModel.Instance.GetInt32(false)); defaultContainer.AddActionImport("SimpleFunctionWithOverload", action1); EdmAction action2 = new EdmAction("TestModel", "SimpleFunctionWithOverload", EdmCoreModel.Instance.GetInt32(false), true /*isbound*/, null); action2.AddParameter("p1", EdmCoreModel.Instance.GetString(false)); defaultContainer.AddActionImport("SimpleFunctionWithOverload", action2); result.OneProductValue = BuildDefaultProductValue(productType); result.OneDerivedProductValue = BuildDefaultProductValue(derivedProductType); result.OneMultipleKeyValue = BuildDefaultMultipleKeyValue(model); result.OneProductWithNavPropsValue = BuildDefaultProductValue(productTypeWithNavProps); return(result); }
static ExtensionTestBase() { var model = new EdmModel(); Model = model; var person = new EdmEntityType("TestNS", "Person"); var personId = person.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32); PersonNameProp = person.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); PersonPen = person.AddStructuralProperty("pen", EdmPrimitiveTypeKind.Binary); person.AddKeys(personId); PersonType = person; var address = new EdmComplexType("TestNS", "Address"); AddrType = address; ZipCodeProperty = address.AddStructuralProperty("ZipCode", EdmPrimitiveTypeKind.String); AddrProperty = person.AddStructuralProperty("Addr", new EdmComplexTypeReference(address, false)); var pencil = new EdmEntityType("TestNS", "Pencil"); var pencilId = pencil.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32); PencilId = pencilId; var pid = pencil.AddStructuralProperty("Pid", EdmPrimitiveTypeKind.Int32); pencil.AddKeys(pencilId); var starPencil = new EdmEntityType("TestNS", "StarPencil", pencil); model.AddElement(starPencil); var starPencilUpper = new EdmEntityType("TestNS", "STARPENCIL"); model.AddElement(starPencilUpper); StarPencil = starPencil; var navInfo = new EdmNavigationPropertyInfo() { Name = "Pen", ContainsTarget = false, Target = pencil, TargetMultiplicity = EdmMultiplicity.One }; PersonNavPen = person.AddUnidirectionalNavigation(navInfo); var navInfo2 = new EdmNavigationPropertyInfo() { Name = "Pen2", ContainsTarget = true, Target = pencil, TargetMultiplicity = EdmMultiplicity.One }; PersonNavPen2 = person.AddUnidirectionalNavigation(navInfo2); var container = new EdmEntityContainer("Default", "Con1"); var personSet = container.AddEntitySet("People", person); PencilSet = container.AddEntitySet("PencilSet", pencil); Boss = container.AddSingleton("Boss", person); Bajie = container.AddSingleton("Bajie", pencil); BajieUpper = container.AddSingleton("BAJIE", pencil); personSet.AddNavigationTarget(PersonNavPen, PencilSet); PeopleSet = personSet; var pencilSetUpper = container.AddEntitySet("PENCILSET", pencil); PencilSetUpper = pencilSetUpper; var pencilRef = new EdmEntityTypeReference(pencil, false); EdmFunction findPencil1 = new EdmFunction("TestNS", "FindPencil", pencilRef, true, null, false); findPencil1.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); model.AddElement(findPencil1); FindPencil1P = findPencil1; EdmFunction findPencil = new EdmFunction("TestNS", "FindPencil", pencilRef, true, null, false); findPencil.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); findPencil.AddParameter("pid", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(findPencil); FindPencil2P = findPencil; EdmFunction findPencils = new EdmFunction("TestNS", "FindPencils", new EdmCollectionTypeReference(new EdmCollectionType(pencilRef)), true, null, false); findPencils.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); model.AddElement(findPencils); FindPencils = findPencils; EdmFunction findPencilsCon = new EdmFunction("TestNS", "FindPencilsCon", new EdmCollectionTypeReference(new EdmCollectionType(pencilRef)), true, null, false); FindPencilsCon = findPencilsCon; findPencilsCon.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); model.AddElement(findPencilsCon); EdmFunction findPencilsConUpper = new EdmFunction("TestNS", "FindPencilsCON", new EdmCollectionTypeReference(new EdmCollectionType(pencilRef)), true, null, false); FindPencilsConUpper = findPencilsConUpper; findPencilsConUpper.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); model.AddElement(findPencilsConUpper); EdmFunction findPencilsConNT = new EdmFunction("TestNT", "FindPencilsCon", new EdmCollectionTypeReference(new EdmCollectionType(pencilRef)), true, null, false); FindPencilsConNT = findPencilsConNT; findPencilsConNT.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); model.AddElement(findPencilsConNT); ChangeZip = new EdmAction("TestNS", "ChangeZip", null, true, null); ChangeZip.AddParameter("address", new EdmComplexTypeReference(address, false)); ChangeZip.AddParameter("newZip", EdmCoreModel.Instance.GetString(false)); model.AddElement(ChangeZip); GetZip = new EdmFunction("TestNS", "GetZip", EdmCoreModel.Instance.GetString(false), true, null, true); GetZip.AddParameter("address", new EdmComplexTypeReference(address, false)); model.AddElement(GetZip); model.AddElement(person); model.AddElement(address); model.AddElement(pencil); model.AddElement(container); var feed = new EdmAction("TestNS", "Feed", null); Feed = feed; feed.AddParameter("pid", EdmCoreModel.Instance.GetInt32(false)); FeedImport = container.AddActionImport("Feed", feed); FeedConImport = container.AddActionImport("FeedCon", feed); FeedConUpperImport = container.AddActionImport("FeedCON", feed); var pet = new EdmEntityType("TestNS", "Pet"); PetType = pet; model.AddElement(pet); var key1 = pet.AddStructuralProperty("key1", EdmCoreModel.Instance.GetInt32(false)); var key2 = pet.AddStructuralProperty("key2", EdmCoreModel.Instance.GetString(false)); pet.AddKeys(key1, key2); var petSet = container.AddEntitySet("PetSet", pet); var petCon = new EdmEntityType("TestNS", "PetCon"); model.AddElement(petCon); var key1Con = pet.AddStructuralProperty("key", EdmCoreModel.Instance.GetInt32(false)); var key2Con = pet.AddStructuralProperty("KEY", EdmCoreModel.Instance.GetString(false)); petCon.AddKeys(key1Con, key2Con); var petSetCon = container.AddEntitySet("PetSetCon", petCon); EdmEnumType colorType = new EdmEnumType("TestNS", "Color"); Color = colorType; colorType.AddMember("Red", new EdmEnumMemberValue(1L)); colorType.AddMember("Blue", new EdmEnumMemberValue(2L)); model.AddElement(colorType); var moonType = new EdmEntityType("TestNS", "Moon"); MoonType = moonType; var color = moonType.AddStructuralProperty("color", new EdmEnumTypeReference(colorType, false)); moonType.AddKeys(color); model.AddElement(moonType); container.AddEntitySet("MoonSet", moonType); var moonType2 = new EdmEntityType("TestNS", "Moon2"); MoonType2 = moonType2; var color2 = moonType2.AddStructuralProperty("color", new EdmEnumTypeReference(colorType, false)); var id = moonType2.AddStructuralProperty("id", EdmCoreModel.Instance.GetInt32(false)); moonType2.AddKeys(color2, id); model.AddElement(moonType2); container.AddEntitySet("MoonSet2", moonType2); EdmFunction findPencilCon = new EdmFunction("TestNS", "FindPencilCon", pencilRef, true, null, false); FindPencilCon = findPencilCon; findPencilCon.AddParameter("qid", new EdmEntityTypeReference(PersonType, false)); findPencilCon.AddParameter("pid", EdmCoreModel.Instance.GetInt32(false)); findPencilCon.AddParameter("PID", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(findPencilCon); EdmFunction getColorCmyk = new EdmFunction("TestNS", "GetColorCmyk", EdmCoreModel.Instance.GetString(false)); getColorCmyk.AddParameter("co", new EdmEnumTypeReference(colorType, true)); GetColorCmyk = getColorCmyk; model.AddElement(getColorCmyk); GetColorCmykImport = container.AddFunctionImport("GetColorCmykImport", getColorCmyk); EdmFunction getMixedColor = new EdmFunction("TestNS", "GetMixedColor", EdmCoreModel.Instance.GetString(false)); getMixedColor.AddParameter("co", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEnumTypeReference(colorType, true)))); model.AddElement(getMixedColor); GetMixedColor = container.AddFunctionImport("GetMixedColorImport", getMixedColor); }