public Task ExtendModelAsync( ModelContext context, CancellationToken cancellationToken) { var model = context.Model; var entityContainer = model.EntityContainer as EdmEntityContainer; foreach (ActionMethodInfo actionInfo in this.ActionInfos) { var returnTypeReference = ConventionalActionProvider.GetReturnTypeReference(actionInfo.Method.ReturnType); var action = new EdmAction(entityContainer.Namespace, actionInfo.ActionName, returnTypeReference); foreach (ParameterInfo parameter in actionInfo.Method.GetParameters()) { EdmOperationParameter actionParam = new EdmOperationParameter( action, parameter.Name, ConventionalActionProvider.GetTypeReference(parameter.ParameterType)); action.AddParameter(actionParam); } model.AddElement(action); if (!action.IsBound) { EdmActionImport actionImport = new EdmActionImport(entityContainer, action.Name, action); entityContainer.AddElement(actionImport); } } return Task.FromResult<object>(null); }
public void VerifyOperationParameterWritten() { var action = new EdmAction("Default.Namespace", "Checkout", null); action.AddParameter("firstParameter", EdmCoreModel.Instance.GetSingle(true)); VisitAndVerifyXml( (visitor) => visitor.VisitSchemaElement(action), @"<Action Name=""Checkout""><Parameter Name=""firstParameter"" Type=""Edm.Single"" /></Action>"); }
public void EdmActionConstructorShouldHaveSpecifiedConstructorValues() { var entitySetPath = new EdmPathExpression("Param1/Nav"); var edmAction = new EdmAction(defaultNamespaceName, checkout, this.boolType, true, entitySetPath); edmAction.AddParameter(new EdmOperationParameter(edmAction, "Param1", new EdmEntityTypeReference(personType, false))); edmAction.Namespace.Should().Be(defaultNamespaceName); edmAction.Name.Should().Be(checkout); edmAction.ReturnType.Should().Be(this.boolType); edmAction.EntitySetPath.Should().Be(entitySetPath); edmAction.IsBound.Should().BeTrue(); edmAction.SchemaElementKind.Should().Be(EdmSchemaElementKind.Action); }
public void EdmActionImportConstructorShouldHaveSpecifiedConstructorValues() { var actionEntitySetPath = new EdmPathExpression("Param1/Nav"); var edmAction = new EdmAction("DefaultNamespace", "Checkout", this.boolType, true, actionEntitySetPath); edmAction.AddParameter(new EdmOperationParameter(edmAction, "Param1", new EdmEntityTypeReference(personType, true))); var actionImportEntitySetPath = new EdmPathExpression("Param1/Nav2"); var edmActionImport = new EdmActionImport(this.entityContainer, "checkoutImport", edmAction, actionImportEntitySetPath); edmActionImport.Name.Should().Be("checkoutImport"); edmActionImport.Container.Should().Be(this.entityContainer); edmActionImport.EntitySet.Should().Be(actionImportEntitySetPath); edmActionImport.Action.Should().Be(edmAction); }
public void AmbigiousOperationBindingShouldReferToFirstOperationAlwaysWhenNotNull() { var action1 = new EdmAction("DS", "name", EdmCoreModel.Instance.GetBoolean(false)); action1.AddParameter("param", EdmCoreModel.Instance.GetBoolean(false)); var function = new EdmFunction("DS2", "name2", EdmCoreModel.Instance.GetBoolean(false), true, new EdmPathExpression("path1"), true); AmbiguousOperationBinding ambigiousOperationBinding = new AmbiguousOperationBinding(action1, function); ambigiousOperationBinding.Namespace.Should().Be("DS"); ambigiousOperationBinding.Name.Should().Be("name"); ambigiousOperationBinding.ReturnType.Should().BeNull(); ambigiousOperationBinding.Parameters.Should().HaveCount(1); ambigiousOperationBinding.SchemaElementKind.Should().Be(EdmSchemaElementKind.Action); ambigiousOperationBinding.IsBound.Should().BeFalse(); ambigiousOperationBinding.EntitySetPath.Should().BeNull(); }
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(); }
private void BoundActionTestSetting() { EdmAction action = new EdmAction("NS", "SingletonAction", null, true, null); action.AddParameter(new EdmOperationParameter(action, "p", new EdmEntityTypeReference(this.webType, false))); this.referencedModel.AddElement(action); }
private static IEdmActionImport AddUnboundAction(EdmEntityContainer container, string name, IEdmEntityType bindingType, bool isCollection) { var action = new EdmAction( container.Namespace, name, returnType: null, isBound: true, entitySetPathExpression: null); IEdmTypeReference bindingParamterType = new EdmEntityTypeReference(bindingType, isNullable: false); if (isCollection) { bindingParamterType = new EdmCollectionTypeReference(new EdmCollectionType(bindingParamterType)); } action.AddParameter("bindingParameter", bindingParamterType); var actionImport = container.AddActionImport(action); return actionImport; }
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); }
public void BoundOperationShouldWriteIsBoundEqualTrueAttribute() { EdmAction action = new EdmAction("Default.Namespace", "Checkout", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); action.AddParameter("param", EdmCoreModel.Instance.GetString(true)); this.TestWriteActionElementHeaderMethod(action, @"<Action Name=""Checkout"" IsBound=""true"""); }
public void OperationTypeIsSameCollectionTypeAsWithBaseBindingShouldReturnFalse() { EdmAction action = new EdmAction("n", "a", null, true, null); action.AddParameter("bindingParameter", DefaultDerivedValidCollectionEntityTypeRef); action.HasEquivalentBindingType(DefaultValidCollectionEntityTypeRef.Definition).Should().BeFalse(); }
public CustomersModelWithInheritance() { EdmModel model = new EdmModel(); // Enum type simpleEnum EdmEnumType simpleEnum = new EdmEnumType("NS", "SimpleEnum"); simpleEnum.AddMember(new EdmEnumMember(simpleEnum, "First", new EdmIntegerConstant(0))); simpleEnum.AddMember(new EdmEnumMember(simpleEnum, "Second", new EdmIntegerConstant(1))); simpleEnum.AddMember(new EdmEnumMember(simpleEnum, "Third", new EdmIntegerConstant(2))); model.AddElement(simpleEnum); // complex type address EdmComplexType address = new EdmComplexType("NS", "Address"); address.AddStructuralProperty("Street", EdmPrimitiveTypeKind.String); address.AddStructuralProperty("City", EdmPrimitiveTypeKind.String); address.AddStructuralProperty("State", EdmPrimitiveTypeKind.String); address.AddStructuralProperty("ZipCode", EdmPrimitiveTypeKind.String); address.AddStructuralProperty("Country", EdmPrimitiveTypeKind.String); model.AddElement(address); // open complex type "Account" EdmComplexType account = new EdmComplexType("NS", "Account", null, false, true); account.AddStructuralProperty("Bank", EdmPrimitiveTypeKind.String); account.AddStructuralProperty("CardNum", EdmPrimitiveTypeKind.Int64); model.AddElement(account); EdmComplexType specialAccount = new EdmComplexType("NS", "SpecialAccount", account, false, true); specialAccount.AddStructuralProperty("SpecialCard", EdmPrimitiveTypeKind.String); model.AddElement(specialAccount); // entity type customer EdmEntityType customer = new EdmEntityType("NS", "Customer"); customer.AddKeys(customer.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); IEdmProperty customerName = customer.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); customer.AddStructuralProperty("SimpleEnum", simpleEnum.ToEdmTypeReference(isNullable: false)); customer.AddStructuralProperty("Address", new EdmComplexTypeReference(address, isNullable: true)); customer.AddStructuralProperty("Account", new EdmComplexTypeReference(account, isNullable: true)); IEdmTypeReference primitiveTypeReference = EdmCoreModel.Instance.GetPrimitive( EdmPrimitiveTypeKind.String, isNullable: true); var city = customer.AddStructuralProperty( "City", primitiveTypeReference, defaultValue: null, concurrencyMode: EdmConcurrencyMode.Fixed); model.AddElement(customer); // derived entity type special customer EdmEntityType specialCustomer = new EdmEntityType("NS", "SpecialCustomer", customer); specialCustomer.AddStructuralProperty("SpecialCustomerProperty", EdmPrimitiveTypeKind.Guid); specialCustomer.AddStructuralProperty("SpecialAddress", new EdmComplexTypeReference(address, isNullable: true)); model.AddElement(specialCustomer); // entity type order (open entity type) EdmEntityType order = new EdmEntityType("NS", "Order", null, false, true); // EdmEntityType order = new EdmEntityType("NS", "Order"); order.AddKeys(order.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); order.AddStructuralProperty("City", EdmPrimitiveTypeKind.String); order.AddStructuralProperty("Amount", EdmPrimitiveTypeKind.Int32); model.AddElement(order); // derived entity type special order EdmEntityType specialOrder = new EdmEntityType("NS", "SpecialOrder", order, false, true); specialOrder.AddStructuralProperty("SpecialOrderProperty", EdmPrimitiveTypeKind.Guid); model.AddElement(specialOrder); // test entity EdmEntityType testEntity = new EdmEntityType("System.Web.OData.Query.Expressions", "TestEntity"); testEntity.AddStructuralProperty("SampleProperty", EdmPrimitiveTypeKind.Binary); model.AddElement(testEntity); // containment // my order EdmEntityType myOrder = new EdmEntityType("NS", "MyOrder"); myOrder.AddKeys(myOrder.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); myOrder.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); model.AddElement(myOrder); // order line EdmEntityType orderLine = new EdmEntityType("NS", "OrderLine"); orderLine.AddKeys(orderLine.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); orderLine.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); model.AddElement(orderLine); EdmNavigationProperty orderLinesNavProp = myOrder.AddUnidirectionalNavigation( new EdmNavigationPropertyInfo { Name = "OrderLines", TargetMultiplicity = EdmMultiplicity.Many, Target = orderLine, ContainsTarget = true, }); EdmNavigationProperty nonContainedOrderLinesNavProp = myOrder.AddUnidirectionalNavigation( new EdmNavigationPropertyInfo { Name = "NonContainedOrderLines", TargetMultiplicity = EdmMultiplicity.Many, Target = orderLine, ContainsTarget = false, }); EdmAction tag = new EdmAction("NS", "tag", returnType: null, isBound: true, entitySetPathExpression: null); tag.AddParameter("entity", new EdmEntityTypeReference(orderLine, false)); model.AddElement(tag); // entity sets EdmEntityContainer container = new EdmEntityContainer("NS", "ModelWithInheritance"); model.AddElement(container); EdmEntitySet customers = container.AddEntitySet("Customers", customer); EdmEntitySet orders = container.AddEntitySet("Orders", order); EdmEntitySet myOrders = container.AddEntitySet("MyOrders", myOrder); // singletons EdmSingleton vipCustomer = container.AddSingleton("VipCustomer", customer); EdmSingleton mary = container.AddSingleton("Mary", customer); EdmSingleton rootOrder = container.AddSingleton("RootOrder", order); // annotations model.SetOptimisticConcurrencyAnnotation(customers, new[] { city }); // containment IEdmContainedEntitySet orderLines = (IEdmContainedEntitySet)myOrders.FindNavigationTarget(orderLinesNavProp); // no-containment IEdmNavigationSource nonContainedOrderLines = myOrders.FindNavigationTarget(nonContainedOrderLinesNavProp); // actions EdmAction upgrade = new EdmAction("NS", "upgrade", returnType: null, isBound: true, entitySetPathExpression: null); upgrade.AddParameter("entity", new EdmEntityTypeReference(customer, false)); model.AddElement(upgrade); EdmAction specialUpgrade = new EdmAction("NS", "specialUpgrade", returnType: null, isBound: true, entitySetPathExpression: null); specialUpgrade.AddParameter("entity", new EdmEntityTypeReference(specialCustomer, false)); model.AddElement(specialUpgrade); // actions bound to collection EdmAction upgradeAll = new EdmAction("NS", "UpgradeAll", returnType: null, isBound: true, entitySetPathExpression: null); upgradeAll.AddParameter("entityset", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(customer, false)))); model.AddElement(upgradeAll); EdmAction upgradeSpecialAll = new EdmAction("NS", "UpgradeSpecialAll", returnType: null, isBound: true, entitySetPathExpression: null); upgradeSpecialAll.AddParameter("entityset", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(specialCustomer, false)))); model.AddElement(upgradeSpecialAll); // functions 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); EdmFunction IsUpgraded = new EdmFunction( "NS", "IsUpgraded", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); IsUpgraded.AddParameter("entity", new EdmEntityTypeReference(customer, false)); model.AddElement(IsUpgraded); EdmFunction orderByCityAndAmount = new EdmFunction( "NS", "OrderByCityAndAmount", stringType, isBound: true, entitySetPathExpression: null, isComposable: false); orderByCityAndAmount.AddParameter("entity", new EdmEntityTypeReference(customer, false)); orderByCityAndAmount.AddParameter("city", stringType); orderByCityAndAmount.AddParameter("amount", intType); model.AddElement(orderByCityAndAmount); EdmFunction getOrders = new EdmFunction( "NS", "GetOrders", EdmCoreModel.GetCollection(order.ToEdmTypeReference(false)), isBound: true, entitySetPathExpression: null, isComposable: true); getOrders.AddParameter("entity", new EdmEntityTypeReference(customer, false)); getOrders.AddParameter("parameter", intType); model.AddElement(getOrders); EdmFunction IsSpecialUpgraded = new EdmFunction( "NS", "IsSpecialUpgraded", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); IsSpecialUpgraded.AddParameter("entity", new EdmEntityTypeReference(specialCustomer, false)); model.AddElement(IsSpecialUpgraded); EdmFunction getSalary = new EdmFunction( "NS", "GetSalary", stringType, isBound: true, entitySetPathExpression: null, isComposable: false); getSalary.AddParameter("entity", new EdmEntityTypeReference(customer, false)); model.AddElement(getSalary); getSalary = new EdmFunction( "NS", "GetSalary", stringType, isBound: true, entitySetPathExpression: null, isComposable: false); getSalary.AddParameter("entity", new EdmEntityTypeReference(specialCustomer, false)); model.AddElement(getSalary); EdmFunction IsAnyUpgraded = new EdmFunction( "NS", "IsAnyUpgraded", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); EdmCollectionType edmCollectionType = new EdmCollectionType(new EdmEntityTypeReference(customer, false)); IsAnyUpgraded.AddParameter("entityset", new EdmCollectionTypeReference(edmCollectionType)); model.AddElement(IsAnyUpgraded); EdmFunction isCustomerUpgradedWithParam = new EdmFunction( "NS", "IsUpgradedWithParam", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); isCustomerUpgradedWithParam.AddParameter("entity", new EdmEntityTypeReference(customer, false)); isCustomerUpgradedWithParam.AddParameter("city", EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, isNullable: false)); model.AddElement(isCustomerUpgradedWithParam); EdmFunction isCustomerLocal = new EdmFunction( "NS", "IsLocal", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); isCustomerLocal.AddParameter("entity", new EdmEntityTypeReference(customer, false)); model.AddElement(isCustomerLocal); EdmFunction entityFunction = new EdmFunction( "NS", "GetCustomer", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); entityFunction.AddParameter("entity", new EdmEntityTypeReference(customer, false)); entityFunction.AddParameter("customer", new EdmEntityTypeReference(customer, false)); model.AddElement(entityFunction); EdmFunction getOrder = new EdmFunction( "NS", "GetOrder", order.ToEdmTypeReference(false), isBound: true, entitySetPathExpression: null, isComposable: true); // Composable getOrder.AddParameter("entity", new EdmEntityTypeReference(customer, false)); getOrder.AddParameter("orderId", intType); model.AddElement(getOrder); // functions bound to collection EdmFunction isAllUpgraded = new EdmFunction("NS", "IsAllUpgraded", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); isAllUpgraded.AddParameter("entityset", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(customer, false)))); isAllUpgraded.AddParameter("param", intType); model.AddElement(isAllUpgraded); EdmFunction isSpecialAllUpgraded = new EdmFunction("NS", "IsSpecialAllUpgraded", returnType, isBound: true, entitySetPathExpression: null, isComposable: false); isSpecialAllUpgraded.AddParameter("entityset", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(specialCustomer, false)))); isSpecialAllUpgraded.AddParameter("param", intType); model.AddElement(isSpecialAllUpgraded); // navigation properties EdmNavigationProperty ordersNavProp = customer.AddUnidirectionalNavigation( new EdmNavigationPropertyInfo { Name = "Orders", TargetMultiplicity = EdmMultiplicity.Many, Target = order }); mary.AddNavigationTarget(ordersNavProp, orders); vipCustomer.AddNavigationTarget(ordersNavProp, orders); customers.AddNavigationTarget(ordersNavProp, orders); orders.AddNavigationTarget( order.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo { Name = "Customer", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, Target = customer }), customers); // navigation properties on derived types. EdmNavigationProperty specialOrdersNavProp = specialCustomer.AddUnidirectionalNavigation( new EdmNavigationPropertyInfo { Name = "SpecialOrders", TargetMultiplicity = EdmMultiplicity.Many, Target = order }); vipCustomer.AddNavigationTarget(specialOrdersNavProp, orders); customers.AddNavigationTarget(specialOrdersNavProp, orders); orders.AddNavigationTarget( specialOrder.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo { Name = "SpecialCustomer", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, Target = customer }), customers); model.SetAnnotationValue<BindableProcedureFinder>(model, new BindableProcedureFinder(model)); // set properties Model = model; Container = container; Customer = customer; Order = order; Address = address; Account = account; SpecialCustomer = specialCustomer; SpecialOrder = specialOrder; Orders = orders; Customers = customers; VipCustomer = vipCustomer; Mary = mary; RootOrder = rootOrder; OrderLine = orderLine; OrderLines = orderLines; NonContainedOrderLines = nonContainedOrderLines; UpgradeCustomer = upgrade; UpgradeSpecialCustomer = specialUpgrade; CustomerName = customerName; IsCustomerUpgraded = isCustomerUpgradedWithParam; IsSpecialCustomerUpgraded = IsSpecialUpgraded; Tag = tag; }
public void ConstructibleModelODataTestModelAnnotationTestWithoutAnnotation() { EdmModel model = new EdmModel(); EdmComplexType address = new EdmComplexType("TestModel", "Address"); EdmStructuralProperty addressStreet = address.AddStructuralProperty("Street", EdmCoreModel.Instance.GetString(true)); EdmStructuralProperty addressZip = address.AddStructuralProperty("Zip", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(address); EdmEntityType person = new EdmEntityType("TestModel", "PersonType"); EdmStructuralProperty personID = person.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty personName = person.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty personAddress = person.AddStructuralProperty("Address", new EdmComplexTypeReference(address, false)); EdmStructuralProperty personPicture = person.AddStructuralProperty("Picture", EdmCoreModel.Instance.GetStream(false)); person.AddKeys(personID); model.AddElement(person); EdmEntityContainer container = new EdmEntityContainer("TestModel", "DefaultContainer"); EdmEntitySet peopleSet = container.AddEntitySet("People", person); EdmEntitySet personSet = container.AddEntitySet("PersonType", person); EdmAction serviceOperationAction = new EdmAction("TestModel", "ServiceOperation1", EdmCoreModel.Instance.GetInt32(false)); EdmOperationParameter a = new EdmOperationParameter(serviceOperationAction, "a", EdmCoreModel.Instance.GetInt32(true)); EdmOperationParameter b = new EdmOperationParameter(serviceOperationAction, "b", EdmCoreModel.Instance.GetString(true)); serviceOperationAction.AddParameter(a); serviceOperationAction.AddParameter(b); model.AddElement(serviceOperationAction); container.AddActionImport("ServiceOperation1", serviceOperationAction); model.AddElement(container); this.BasicConstructibleModelTestSerializingStockModel(ODataTestModelBuilder.ODataTestModelAnnotationTestWithoutAnnotations, model); }
public void ConstructibleModelODataTestModelBasicTest() { EdmModel model = new EdmModel(); EdmComplexType address = new EdmComplexType("TestModel", "Address"); model.AddElement(address); EdmStructuralProperty addressStreet = address.AddStructuralProperty("Street", EdmCoreModel.Instance.GetString(true)); EdmStructuralProperty addressZip = new EdmStructuralProperty(address, "Zip", EdmCoreModel.Instance.GetInt32(false)); address.AddProperty(addressZip); EdmEntityType office = new EdmEntityType("TestModel", "OfficeType"); EdmStructuralProperty officeId = office.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(false)); office.AddKeys(officeId); EdmStructuralProperty officeAddress = office.AddStructuralProperty("Address", new EdmComplexTypeReference(address, false)); model.AddElement(office); EdmEntityType city = new EdmEntityType("TestModel", "CityType"); EdmStructuralProperty cityId = city.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(false)); city.AddKeys(cityId); EdmStructuralProperty cityName = city.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(true)); EdmStructuralProperty citySkyline = city.AddStructuralProperty("Skyline", EdmCoreModel.Instance.GetStream(false)); EdmStructuralProperty cityMetroLanes = city.AddStructuralProperty("MetroLanes", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(true))); EdmNavigationProperty cityHall = city.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "CityHall", Target = office, TargetMultiplicity = EdmMultiplicity.Many }); EdmNavigationProperty dol = city.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "DOL", Target = office, TargetMultiplicity = EdmMultiplicity.Many }); EdmNavigationProperty policeStation = city.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "PoliceStation", Target = office, TargetMultiplicity = EdmMultiplicity.One }); model.AddElement(city); EdmEntityType cityWithMap = new EdmEntityType("TestModel", "CityWithMapType", city); model.AddElement(cityWithMap); EdmEntityType cityOpenType = new EdmEntityType("TestModel", "CityOpenType", city, false, true); model.AddElement(cityOpenType); EdmEntityType person = new EdmEntityType("TestModel", "Person"); EdmStructuralProperty personId = person.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(false)); person.AddKeys(personId); model.AddElement(person); EdmNavigationProperty friend = person.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Friend", Target = person, TargetMultiplicity = EdmMultiplicity.Many }); EdmEntityType employee = new EdmEntityType("TestModel", "Employee", person); EdmStructuralProperty companyName = employee.AddStructuralProperty("CompanyName", EdmCoreModel.Instance.GetString(true)); model.AddElement(employee); EdmEntityType manager = new EdmEntityType("TestModel", "Manager", employee); EdmStructuralProperty level = manager.AddStructuralProperty("Level", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(manager); EdmEntityContainer container = new EdmEntityContainer("TestModel", "DefaultContainer"); EdmEntitySet officeSet = new EdmEntitySet(container, "OfficeType", office); container.AddElement(officeSet); EdmEntitySet citySet = container.AddEntitySet("CityType", city); EdmEntitySet personSet = container.AddEntitySet("Person", person); citySet.AddNavigationTarget(cityHall, officeSet); citySet.AddNavigationTarget(dol, officeSet); citySet.AddNavigationTarget(policeStation, officeSet); personSet.AddNavigationTarget(friend, personSet); EdmAction serviceOperationAction = new EdmAction("TestModel", "ServiceOperation1", EdmCoreModel.Instance.GetInt32(true)); EdmOperationParameter a = new EdmOperationParameter(serviceOperationAction, "a", EdmCoreModel.Instance.GetInt32(true)); serviceOperationAction.AddParameter(a); serviceOperationAction.AddParameter("b", EdmCoreModel.Instance.GetString(true)); model.AddElement(serviceOperationAction); container.AddActionImport("ServiceOperation1", serviceOperationAction); model.AddElement(container); this.BasicConstructibleModelTestSerializingStockModel(ODataTestModelBuilder.ODataTestModelBasicTest, model); }
private IEdmModel GetUntypeModel() { var model = new EdmModel(); // entity type customer EdmEntityType customer = new EdmEntityType("System.Web.OData.Formatter", "Customer"); customer.AddKeys(customer.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); customer.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); model.AddElement(customer); EdmEntityType subCustomer = new EdmEntityType("System.Web.OData.Formatter", "SubCustomer", customer); customer.AddKeys(subCustomer.AddStructuralProperty("Price", EdmPrimitiveTypeKind.Double)); model.AddElement(subCustomer); EdmAction action = new EdmAction("NS", "MyAction", null, isBound: true, entitySetPathExpression: null); action.AddParameter("bindingParameter", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(customer, isNullable: false)))); action.AddParameter("Customer", new EdmEntityTypeReference(customer, isNullable: true)); action.AddParameter("Customers", new EdmCollectionTypeReference( new EdmCollectionType(new EdmEntityTypeReference(customer, isNullable: true)))); model.AddElement(action); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); container.AddEntitySet("UntypedCustomers", customer); model.AddElement(container); return model; }
public void FullNameWithParametersShouldReturnCorrectValue() { var action = new EdmAction("d.s", "checkout", null); action.AddParameter("param1", EdmCoreModel.Instance.GetString(true)); action.FullNameWithParameters().Should().Be("d.s.checkout(Edm.String)"); }
public void FilterBoundOperationsWithSameTypeHierarchyToTypeClosestToBindingTypeShouldFilterReturnTypeClosestToTypeA() { EdmEntityType aType = new EdmEntityType("N", "A"); EdmEntityType bType = new EdmEntityType("N", "B", aType); EdmEntityType cType = new EdmEntityType("N", "C", bType); EdmAction action = new EdmAction("namespace", "action", null, true, null); action.AddParameter("bindingParameter", new EdmEntityTypeReference(aType, false)); EdmAction action2 = new EdmAction("namespace", "action", null, true, null); action2.AddParameter("bindingParameter", new EdmEntityTypeReference(bType, false)); var filteredResults = new IEdmOperation[] { action, action2 }.FilterBoundOperationsWithSameTypeHierarchyToTypeClosestToBindingType(cType).ToList(); filteredResults.Should().HaveCount(1); filteredResults[0].Should().BeSameAs(action2); }
public void ConstructibleModelODataTestModelWithFunctionImport() { EdmModel model = new EdmModel(); EdmComplexType complexType = new EdmComplexType("TestModel", "ComplexType"); EdmStructuralProperty primitiveProperty = complexType.AddStructuralProperty("PrimitiveProperty", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty complexProperty = complexType.AddStructuralProperty("ComplexProperty", new EdmComplexTypeReference(complexType, false)); model.AddElement(complexType); EdmEntityType entity = new EdmEntityType("TestNS", "EntityType"); EdmStructuralProperty entityId = entity.AddStructuralProperty("ID", EdmCoreModel.Instance.GetInt32(false)); entity.AddKeys(entityId); EdmStructuralProperty entityComplexProperty = entity.AddStructuralProperty("ComplexProperty", new EdmComplexTypeReference(complexType, false)); model.AddElement(entity); EdmEnumType enumType = new EdmEnumType("TestNS", "EnumType"); model.AddElement(enumType); EdmEntityContainer container = new EdmEntityContainer("TestNS", "TestContainer"); EdmAction primitiveOperationAction = new EdmAction("TestNS", "FunctionImport_Primitive", null); EdmOperationParameter primitiveParameter = new EdmOperationParameter(primitiveOperationAction, "primitive", EdmCoreModel.Instance.GetString(true)); primitiveOperationAction.AddParameter(primitiveParameter); model.AddElement(primitiveOperationAction); container.AddActionImport("FunctionImport_Primitive", primitiveOperationAction); EdmAction primitiveCollectionOperationAction = new EdmAction("TestNS", "FunctionImport_PrimitiveCollection", null); EdmOperationParameter primitiveCollectionParameter = new EdmOperationParameter(primitiveCollectionOperationAction, "primitiveCollection", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(true))); primitiveCollectionOperationAction.AddParameter(primitiveCollectionParameter); model.AddElement(primitiveCollectionOperationAction); container.AddActionImport("FunctionImport_PrimitiveCollection", primitiveCollectionOperationAction); EdmAction complexOperationAction = new EdmAction("TestNS", "FunctionImport_Complex", null); EdmOperationParameter complexParameter = new EdmOperationParameter(complexOperationAction, "complex", new EdmComplexTypeReference(complexType, true)); complexOperationAction.AddParameter(complexParameter); model.AddElement(complexOperationAction); container.AddActionImport("FunctionImport_Complex", complexOperationAction); EdmAction complexCollectionOperationAction = new EdmAction("TestNS", "FunctionImport_ComplexCollection", null); EdmOperationParameter complexCollectionParameter = new EdmOperationParameter(complexCollectionOperationAction, "complexCollection", EdmCoreModel.GetCollection(new EdmComplexTypeReference(complexType, true))); complexCollectionOperationAction.AddParameter(complexCollectionParameter); model.AddElement(complexCollectionOperationAction); container.AddActionImport("FunctionImport_ComplexCollection", complexCollectionOperationAction); EdmAction entityOperationAction = new EdmAction("TestNS", "FunctionImport_Entry", null); EdmOperationParameter entityParameter = new EdmOperationParameter(entityOperationAction, "entry", new EdmEntityTypeReference(entity, true)); entityOperationAction.AddParameter(entityParameter); model.AddElement(entityOperationAction); container.AddActionImport("FunctionImport_Entry", entityOperationAction); EdmAction feedOperationAction = new EdmAction("TestNS", "FunctionImport_Feed", null); EdmOperationParameter feedParameter = new EdmOperationParameter(feedOperationAction, "feed", EdmCoreModel.GetCollection(new EdmEntityTypeReference(entity, true))); feedOperationAction.AddParameter(feedParameter); model.AddElement(feedOperationAction); container.AddActionImport("FunctionImport_Feed", feedOperationAction); EdmAction streamOperationAction = new EdmAction("TestNS", "FunctionImport_Stream", null); EdmOperationParameter streamParameter = new EdmOperationParameter(streamOperationAction, "stream", EdmCoreModel.Instance.GetStream(true)); streamOperationAction.AddParameter(streamParameter); model.AddElement(streamOperationAction); container.AddActionImport("FunctionImport_Stream", streamOperationAction); EdmAction enumOperationAction = new EdmAction("TestNS", "FunctionImport_Enum", null); EdmOperationParameter enumParameter = new EdmOperationParameter(enumOperationAction, "enum", new EdmEnumTypeReference(enumType, true)); enumOperationAction.AddParameter(enumParameter); model.AddElement(enumOperationAction); container.AddActionImport("FunctionImport_Enum", enumOperationAction); model.AddElement(container); this.BasicConstructibleModelTestSerializingStockModel(ODataTestModelBuilder.ODataTestModelWithFunctionImport, model); }
public void OperationTypeIsSameAsBindingShouldReturnTrue() { EdmAction action = new EdmAction("n", "a", null, true, null); action.AddParameter("bindingParameter", DefaultValidEntityTypeRef); action.HasEquivalentBindingType(DefaultValidEntityType).Should().BeTrue(); }
public void ConstructibleModelODataTestModelDefaultModel() { EdmModel model = new EdmModel(); EdmComplexType aliases = new EdmComplexType("DefaultNamespace", "Aliases"); EdmStructuralProperty aliasesAlternativeNames = aliases.AddStructuralProperty("AlternativeNames", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(false, 10, null, false))); model.AddElement(aliases); EdmComplexType phone = new EdmComplexType("DefaultNamespace", "Phone"); EdmStructuralProperty phoneNumber = phone.AddStructuralProperty("PhoneNumber", EdmCoreModel.Instance.GetString(false, 16, null, false)); EdmStructuralProperty phoneExtension = phone.AddStructuralProperty("Extension", EdmCoreModel.Instance.GetString(false, 16, null, true)); model.AddElement(phone); EdmComplexType contact = new EdmComplexType("DefaultNamespace", "ContactDetails"); EdmStructuralProperty contactEmailBag = contact.AddStructuralProperty("EmailBag", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(false, 32, null, false))); EdmStructuralProperty contactAlternativeNames = contact.AddStructuralProperty("AlternativeNames", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(false, 10, null, false))); EdmStructuralProperty contactAlias = contact.AddStructuralProperty("ContactAlias", new EdmComplexTypeReference(aliases, false)); EdmStructuralProperty contactHomePhone = contact.AddStructuralProperty("HomePhone", new EdmComplexTypeReference(phone, false)); EdmStructuralProperty contactWorkPhone = contact.AddStructuralProperty("WorkPhone", new EdmComplexTypeReference(phone, false)); EdmStructuralProperty contactMobilePhoneBag = contact.AddStructuralProperty("MobilePhoneBag", EdmCoreModel.GetCollection(new EdmComplexTypeReference(phone, false))); model.AddElement(contact); EdmComplexType category = new EdmComplexType("DefaultNamespace", "ComplexToCategory"); EdmStructuralProperty categoryTerm = category.AddStructuralProperty("Term", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty categoryScheme = category.AddStructuralProperty("Scheme", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty categoryLabel = category.AddStructuralProperty("Label", EdmCoreModel.Instance.GetString(false)); model.AddElement(category); EdmComplexType dimensions = new EdmComplexType("DefaultNamespace", "Dimensions"); EdmStructuralProperty dimensionsWidth = dimensions.AddStructuralProperty("Width", EdmCoreModel.Instance.GetDecimal(10, 3, false)); EdmStructuralProperty dimensionsHeight = dimensions.AddStructuralProperty("Height", EdmCoreModel.Instance.GetDecimal(10, 3, false)); EdmStructuralProperty dimensionsDepth = dimensions.AddStructuralProperty("Depth", EdmCoreModel.Instance.GetDecimal(10, 3, false)); model.AddElement(dimensions); EdmComplexType concurrency = new EdmComplexType("DefaultNamespace", "ConcurrencyInfo"); EdmStructuralProperty concurrencyToken = concurrency.AddStructuralProperty("Token", EdmCoreModel.Instance.GetString(false, 20, null, false)); EdmStructuralProperty concurrencyQueriedDateTime = concurrency.AddStructuralProperty("QueriedDateTime", EdmCoreModel.Instance.GetDateTimeOffset(true)); model.AddElement(concurrency); EdmComplexType audit = new EdmComplexType("DefaultNamespace", "AuditInfo"); EdmStructuralProperty auditModifiedDate = audit.AddStructuralProperty("ModifiedDate", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty auditModifiedBy = audit.AddStructuralProperty("ModifiedBy", EdmCoreModel.Instance.GetString(false, 50, null, false)); EdmStructuralProperty auditConcurrency = audit.AddStructuralProperty("Concurrency", new EdmComplexTypeReference(concurrency, false)); model.AddElement(audit); EdmEntityType customer = new EdmEntityType("DefaultNamespace", "Customer"); EdmStructuralProperty customerId = customer.AddStructuralProperty("CustomerId", EdmCoreModel.Instance.GetInt32(false)); customer.AddKeys(customerId); EdmStructuralProperty customerName = customer.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false, 100, null, false)); EdmStructuralProperty customerPrimaryContact = customer.AddStructuralProperty("PrimaryContactInfo", new EdmComplexTypeReference(contact, false)); EdmStructuralProperty customerBackupContact = customer.AddStructuralProperty("BackupContactInfo", EdmCoreModel.GetCollection(new EdmComplexTypeReference(contact, false))); EdmStructuralProperty customerAuditing = customer.AddStructuralProperty("Auditing", new EdmComplexTypeReference(audit, false)); EdmStructuralProperty customerThumbnail = customer.AddStructuralProperty("Thumbnail", EdmCoreModel.Instance.GetStream(false)); EdmStructuralProperty customerVideo = customer.AddStructuralProperty("Video", EdmCoreModel.Instance.GetStream(false)); model.AddElement(customer); EdmEntityType barcode = new EdmEntityType("DefaultNamespace", "Barcode"); EdmStructuralProperty barcodeCode = barcode.AddStructuralProperty("Code", EdmCoreModel.Instance.GetInt32(false)); barcode.AddKeys(barcodeCode); EdmStructuralProperty barcodeProductId = barcode.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty barcodeText = barcode.AddStructuralProperty("Text", EdmCoreModel.Instance.GetString(false)); model.AddElement(barcode); EdmEntityType incorrectScan = new EdmEntityType("DefaultNamespace", "IncorrectScan"); EdmStructuralProperty incorrectScanId = incorrectScan.AddStructuralProperty("IncorrectScanId", EdmCoreModel.Instance.GetInt32(false)); incorrectScan.AddKeys(incorrectScanId); EdmStructuralProperty incorrectScanExpectedCode = incorrectScan.AddStructuralProperty("ExpectedCode", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty incorrectScanActualCode = incorrectScan.AddStructuralProperty("ActualCode", EdmCoreModel.Instance.GetInt32(true)); EdmStructuralProperty incorrectScanDate = incorrectScan.AddStructuralProperty("ScanDate", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetDateTimeOffset(false))); EdmStructuralProperty incorrectScanDetails = incorrectScan.AddStructuralProperty("Details", EdmCoreModel.Instance.GetString(false)); model.AddElement(incorrectScan); EdmEntityType barcodeDetail = new EdmEntityType("DefaultNamespace", "BarcodeDetail"); EdmStructuralProperty barcodeDetailCode = barcodeDetail.AddStructuralProperty("Code", EdmCoreModel.Instance.GetInt32(false)); barcodeDetail.AddKeys(barcodeDetailCode); EdmStructuralProperty barcodeDetailRegisteredTo = barcodeDetail.AddStructuralProperty("RegisteredTo", EdmCoreModel.Instance.GetString(false)); model.AddElement(barcodeDetail); EdmEntityType complaint = new EdmEntityType("DefaultNamespace", "Complaint"); EdmStructuralProperty complaintId = complaint.AddStructuralProperty("ComplaintId", EdmCoreModel.Instance.GetInt32(false)); complaint.AddKeys(complaintId); EdmStructuralProperty complaintCustomerId = complaint.AddStructuralProperty("CustomerId", EdmCoreModel.Instance.GetInt32(true)); EdmStructuralProperty complaintLogged = complaint.AddStructuralProperty("Logged", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty complaintDetails = complaint.AddStructuralProperty("Details", EdmCoreModel.Instance.GetString(false)); model.AddElement(complaint); EdmEntityType resolution = new EdmEntityType("DefaultNamespace", "Resolution"); EdmStructuralProperty resolutionId = resolution.AddStructuralProperty("ResolutionId", EdmCoreModel.Instance.GetInt32(false)); resolution.AddKeys(resolutionId); EdmStructuralProperty resolutionDetails = resolution.AddStructuralProperty("Details", EdmCoreModel.Instance.GetString(false)); model.AddElement(resolution); EdmEntityType login = new EdmEntityType("DefaultNamespace", "Login"); EdmStructuralProperty loginUsername = login.AddStructuralProperty("Username", EdmCoreModel.Instance.GetString(false, 50, null, false)); login.AddKeys(loginUsername); EdmStructuralProperty loginCustomerId = login.AddStructuralProperty("CustomerId", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(login); EdmEntityType suspiciousActivity = new EdmEntityType("DefaultNamespace", "SuspiciousActivity"); EdmStructuralProperty suspiciousActivityId = suspiciousActivity.AddStructuralProperty("SuspiciousActivityId", EdmCoreModel.Instance.GetInt32(false)); suspiciousActivity.AddKeys(suspiciousActivityId); EdmStructuralProperty suspiciousActivityProperty = suspiciousActivity.AddStructuralProperty("Activity", EdmCoreModel.Instance.GetString(false)); model.AddElement(suspiciousActivity); EdmEntityType smartCard = new EdmEntityType("DefaultNamespace", "SmartCard"); EdmStructuralProperty smartCardUsername = smartCard.AddStructuralProperty("Username", EdmCoreModel.Instance.GetString(false, 50, null, false)); smartCard.AddKeys(smartCardUsername); EdmStructuralProperty smartCardSerial = smartCard.AddStructuralProperty("CardSerial", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty smartCardIssued = smartCard.AddStructuralProperty("Issued", EdmCoreModel.Instance.GetDateTimeOffset(false)); model.AddElement(smartCard); EdmEntityType rsaToken = new EdmEntityType("DefaultNamespace", "RSAToken"); EdmStructuralProperty rsaTokenSerial = rsaToken.AddStructuralProperty("Serial", EdmCoreModel.Instance.GetString(false, 20, null, false)); rsaToken.AddKeys(rsaTokenSerial); EdmStructuralProperty rsaTokenIssued = rsaToken.AddStructuralProperty("Issued", EdmCoreModel.Instance.GetDateTimeOffset(false)); model.AddElement(rsaToken); EdmEntityType passwordReset = new EdmEntityType("DefaultNamespace", "PasswordReset"); EdmStructuralProperty passwordResetNo = passwordReset.AddStructuralProperty("ResetNo", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty passwordResetUsername = passwordReset.AddStructuralProperty("Username", EdmCoreModel.Instance.GetString(false, 50, null, false)); passwordReset.AddKeys(passwordResetNo); passwordReset.AddKeys(passwordResetUsername); EdmStructuralProperty passwordResetTempPassword = passwordReset.AddStructuralProperty("TempPassword", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty passwordResetEmailedTo = passwordReset.AddStructuralProperty("EmailedTo", EdmCoreModel.Instance.GetString(false)); model.AddElement(passwordReset); EdmEntityType pageView = new EdmEntityType("DefaultNamespace", "PageView"); EdmStructuralProperty pageViewId = pageView.AddStructuralProperty("PageViewId", EdmCoreModel.Instance.GetInt32(false)); pageView.AddKeys(pageViewId); EdmStructuralProperty pageViewUsername = pageView.AddStructuralProperty("Username", EdmCoreModel.Instance.GetString(false, 50, null, false)); EdmStructuralProperty pageViewed = pageView.AddStructuralProperty("Viewed", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty pageViewPageUrl = pageView.AddStructuralProperty("PageUrl", EdmCoreModel.Instance.GetString(false, 500, null, false)); model.AddElement(pageView); EdmEntityType productPageView = new EdmEntityType("DefaultNamespace", "ProductPageView", pageView); EdmStructuralProperty productPageViewId = productPageView.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(productPageView); EdmEntityType lastLogin = new EdmEntityType("DefaultNamespace", "LastLogin"); EdmStructuralProperty lastLoginUsername = lastLogin.AddStructuralProperty("Username", EdmCoreModel.Instance.GetString(false, 50, null, false)); lastLogin.AddKeys(lastLoginUsername); EdmStructuralProperty lastLoginLoggedIn = lastLogin.AddStructuralProperty("LoggedIn", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty lastLoginLoggedOut = lastLogin.AddStructuralProperty("LoggedOut", EdmCoreModel.Instance.GetDateTimeOffset(true)); model.AddElement(lastLogin); EdmEntityType message = new EdmEntityType("DefaultNamespace", "Message"); EdmStructuralProperty messageId = message.AddStructuralProperty("MessageId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty messageFromUsername = message.AddStructuralProperty("FromUsername", EdmCoreModel.Instance.GetString(false, 50, null, false)); message.AddKeys(messageId); message.AddKeys(messageFromUsername); EdmStructuralProperty messageToUsername = message.AddStructuralProperty("ToUsername", EdmCoreModel.Instance.GetString(false, 50, null, false)); EdmStructuralProperty messageSent = message.AddStructuralProperty("Sent", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty messageSubject = message.AddStructuralProperty("Subject", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty messageBody = message.AddStructuralProperty("Body", EdmCoreModel.Instance.GetString(true)); EdmStructuralProperty messageIsRead = message.AddStructuralProperty("IsRead", EdmCoreModel.Instance.GetBoolean(false)); model.AddElement(message); EdmEntityType order = new EdmEntityType("DefaultNamespace", "Order"); EdmStructuralProperty orderId = order.AddStructuralProperty("OrderId", EdmCoreModel.Instance.GetInt32(false)); order.AddKeys(orderId); EdmStructuralProperty orderCustomerId = order.AddStructuralProperty("CustomerId", EdmCoreModel.Instance.GetInt32(true)); EdmStructuralProperty orderConcurrency = order.AddStructuralProperty("Concurrency", new EdmComplexTypeReference(concurrency, false)); model.AddElement(order); EdmEntityType orderNote = new EdmEntityType("DefaultNamespace", "OrderNote"); EdmStructuralProperty orderNoteId = orderNote.AddStructuralProperty("NoteId", EdmCoreModel.Instance.GetInt32(false)); orderNote.AddKeys(orderNoteId); EdmStructuralProperty orderNoteDescription = orderNote.AddStructuralProperty("Note", EdmCoreModel.Instance.GetString(false)); model.AddElement(orderNote); EdmEntityType orderQualityCheck = new EdmEntityType("DefaultNamespace", "OrderQualityCheck"); EdmStructuralProperty orderQualityCheckId = orderQualityCheck.AddStructuralProperty("OrderId", EdmCoreModel.Instance.GetInt32(false)); orderQualityCheck.AddKeys(orderQualityCheckId); EdmStructuralProperty orderQualityCheckBy = orderQualityCheck.AddStructuralProperty("CheckedBy", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty orderQualityCheckDateTime = orderQualityCheck.AddStructuralProperty("CheckedDateTime", EdmCoreModel.Instance.GetDateTimeOffset(false)); model.AddElement(orderQualityCheck); EdmEntityType orderLine = new EdmEntityType("DefaultNamespace", "OrderLine"); EdmStructuralProperty orderLineOrderId = orderLine.AddStructuralProperty("OrderId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty orderLineProductId = orderLine.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); orderLine.AddKeys(orderLineOrderId); orderLine.AddKeys(orderLineProductId); EdmStructuralProperty orderLineQuantity = orderLine.AddStructuralProperty("Quantity", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty orderLineConcurrencyToken = orderLine.AddStructuralProperty("ConcurrencyToken", EdmCoreModel.Instance.GetString(false), null, EdmConcurrencyMode.Fixed); EdmStructuralProperty orderLineStream = orderLine.AddStructuralProperty("OrderLineStream", EdmCoreModel.Instance.GetStream(false)); model.AddElement(orderLine); EdmEntityType backOrderLine = new EdmEntityType("DefaultNamespace", "BackOrderLine", orderLine); model.AddElement(backOrderLine); EdmEntityType backOrderLine2 = new EdmEntityType("DefaultNamespace", "BackOrderLine2", backOrderLine); model.AddElement(backOrderLine2); EdmEntityType product = new EdmEntityType("DefaultNamespace", "Product"); EdmStructuralProperty productId = product.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); product.AddKeys(productId); EdmStructuralProperty productDescription = product.AddStructuralProperty("Description", EdmCoreModel.Instance.GetString(false, 1000, true, true)); EdmStructuralProperty productDimensions = product.AddStructuralProperty("Dimensions", new EdmComplexTypeReference(dimensions, false)); EdmStructuralProperty productBaseConcurrency = new EdmStructuralProperty( product, "BaseConcurrency", EdmCoreModel.Instance.GetString(false), null, EdmConcurrencyMode.Fixed); product.AddProperty(productBaseConcurrency); EdmStructuralProperty productComplexConcurrency = product.AddStructuralProperty("ComplexConcurrency", new EdmComplexTypeReference(concurrency, false)); EdmStructuralProperty productNestedComplexConcurrency = product.AddStructuralProperty("NestedComplexConcurrency", new EdmComplexTypeReference(audit, false)); EdmStructuralProperty productPicture = product.AddStructuralProperty("Picture", EdmCoreModel.Instance.GetStream(false)); model.AddElement(product); EdmEntityType discontinuedProduct = new EdmEntityType("DefaultNamespace", "DiscontinuedProduct", product); EdmStructuralProperty discontinuedProductDate = discontinuedProduct.AddStructuralProperty("Discontinued", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty discontinuedProductReplacementProductId = discontinuedProduct.AddStructuralProperty("ReplacementProductId", EdmCoreModel.Instance.GetInt32(true)); EdmStructuralProperty discontinuedProductDiscontinuedPhone = discontinuedProduct.AddStructuralProperty("DiscontinuedPhone", new EdmComplexTypeReference(phone, false)); model.AddElement(discontinuedProduct); EdmEntityType productDetail = new EdmEntityType("DefaultNamespace", "ProductDetail"); EdmStructuralProperty productDetailProductId = productDetail.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); productDetail.AddKeys(productDetailProductId); EdmStructuralProperty productDetails = productDetail.AddStructuralProperty("Details", EdmCoreModel.Instance.GetString(false)); model.AddElement(productDetail); EdmEntityType productReview = new EdmEntityType("DefaultNamespace", "ProductReview"); EdmStructuralProperty productReviewProductId = productReview.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty productReviewId = productReview.AddStructuralProperty("ReviewId", EdmCoreModel.Instance.GetInt32(false)); productReview.AddKeys(productReviewProductId); productReview.AddKeys(productReviewId); EdmStructuralProperty productReviewDescription = productReview.AddStructuralProperty("Review", EdmCoreModel.Instance.GetString(false)); model.AddElement(productReview); EdmEntityType productPhoto = new EdmEntityType("DefaultNamespace", "ProductPhoto"); EdmStructuralProperty productPhotoProductId = productPhoto.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty productPhotoId = productPhoto.AddStructuralProperty("PhotoId", EdmCoreModel.Instance.GetInt32(false)); productPhoto.AddKeys(productPhotoProductId); productPhoto.AddKeys(productPhotoId); EdmStructuralProperty productPhotoBinary = productPhoto.AddStructuralProperty("Photo", EdmCoreModel.Instance.GetBinary(false)); model.AddElement(productPhoto); EdmEntityType productWebFeature = new EdmEntityType("DefaultNamespace", "ProductWebFeature"); EdmStructuralProperty productWebFeatureId = productWebFeature.AddStructuralProperty("FeatureId", EdmCoreModel.Instance.GetInt32(false)); productWebFeature.AddKeys(productWebFeatureId); EdmStructuralProperty productWebFeatureProductId = productWebFeature.AddStructuralProperty("ProductId", EdmCoreModel.Instance.GetInt32(true)); EdmStructuralProperty productWebFeaturePhotoId = productWebFeature.AddStructuralProperty("PhotoId", EdmCoreModel.Instance.GetInt32(true)); EdmStructuralProperty productWebFeatureReviewId = productWebFeature.AddStructuralProperty("ReviewId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty productWebFeatureHeading = productWebFeature.AddStructuralProperty("Heading", EdmCoreModel.Instance.GetString(false)); model.AddElement(productWebFeature); EdmEntityType supplier = new EdmEntityType("DefaultNamespace", "Supplier"); EdmStructuralProperty supplierId = supplier.AddStructuralProperty("SupplierId", EdmCoreModel.Instance.GetInt32(false)); supplier.AddKeys(supplierId); EdmStructuralProperty supplierName = supplier.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false)); model.AddElement(supplier); EdmEntityType supplierLogo = new EdmEntityType("DefaultNamespace", "SupplierLogo"); EdmStructuralProperty supplierLogoSupplierId = supplierLogo.AddStructuralProperty("SupplierId", EdmCoreModel.Instance.GetInt32(false)); supplierLogo.AddKeys(supplierLogoSupplierId); EdmStructuralProperty supplierLogoBinary = supplierLogo.AddStructuralProperty("Logo", EdmCoreModel.Instance.GetBinary(false, 500, false)); model.AddElement(supplierLogo); EdmEntityType supplierInfo = new EdmEntityType("DefaultNamespace", "SupplierInfo"); EdmStructuralProperty supplierInfoId = supplierInfo.AddStructuralProperty("SupplierInfoId", EdmCoreModel.Instance.GetInt32(false)); supplierInfo.AddKeys(supplierInfoId); EdmStructuralProperty supplierInfoDescription = supplierInfo.AddStructuralProperty("Information", EdmCoreModel.Instance.GetString(false)); model.AddElement(supplierInfo); EdmEntityType customerInfo = new EdmEntityType("DefaultNamespace", "CustomerInfo"); EdmStructuralProperty customerInfoId = customerInfo.AddStructuralProperty("CustomerInfoId", EdmCoreModel.Instance.GetInt32(false)); customerInfo.AddKeys(customerInfoId); EdmStructuralProperty customerInfoDescription = customerInfo.AddStructuralProperty("Information", EdmCoreModel.Instance.GetString(true)); model.AddElement(customerInfo); EdmEntityType computer = new EdmEntityType("DefaultNamespace", "Computer"); EdmStructuralProperty computerId = computer.AddStructuralProperty("ComputerId", EdmCoreModel.Instance.GetInt32(false)); computer.AddKeys(computerId); EdmStructuralProperty computerName = computer.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false)); model.AddElement(computer); EdmEntityType computerDetail = new EdmEntityType("DefaultNamespace", "ComputerDetail"); EdmStructuralProperty computerDetailId = computerDetail.AddStructuralProperty("ComputerDetailId", EdmCoreModel.Instance.GetInt32(false)); computerDetail.AddKeys(computerDetailId); EdmStructuralProperty computerDetailManufacturer = computerDetail.AddStructuralProperty("Manufacturer", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty computerDetailModel = computerDetail.AddStructuralProperty("Model", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty computerDetailSerial = computerDetail.AddStructuralProperty("Serial", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty computerDetailSpecificationsBag = computerDetail.AddStructuralProperty("SpecificationsBag", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(false))); EdmStructuralProperty computerDetailPurchaseDate = computerDetail.AddStructuralProperty("PurchaseDate", EdmCoreModel.Instance.GetDateTimeOffset(false)); EdmStructuralProperty computerDetailDimensions = computerDetail.AddStructuralProperty("Dimensions", new EdmComplexTypeReference(dimensions, false)); model.AddElement(computerDetail); EdmEntityType driver = new EdmEntityType("DefaultNamespace", "Driver"); EdmStructuralProperty driverName = driver.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false, 100, null, false)); driver.AddKeys(driverName); EdmStructuralProperty driverBirthDate = driver.AddStructuralProperty("BirthDate", EdmCoreModel.Instance.GetDateTimeOffset(false)); model.AddElement(driver); EdmEntityType license = new EdmEntityType("DefaultNamespace", "License"); EdmStructuralProperty licenseName = license.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false, 100, null, false)); license.AddKeys(licenseName); EdmStructuralProperty licenseNumber = license.AddStructuralProperty("LicenseNumber", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty licenseClass = license.AddStructuralProperty("LicenseClass", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty licenseRestrictions = license.AddStructuralProperty("Restrictions", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty licenseExpiration = license.AddStructuralProperty("ExpirationDate", EdmCoreModel.Instance.GetDateTimeOffset(false)); model.AddElement(license); EdmEntityType mappedEntity = new EdmEntityType("DefaultNamespace", "MappedEntityType"); EdmStructuralProperty mappedEntityId = mappedEntity.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt32(false)); mappedEntity.AddKeys(mappedEntityId); EdmStructuralProperty mappedEntityHref = mappedEntity.AddStructuralProperty("Href", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty mappedEntityTitle = mappedEntity.AddStructuralProperty("Title", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty mappedEntityHrefLang = mappedEntity.AddStructuralProperty("HrefLang", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty mappedEntityType = mappedEntity.AddStructuralProperty("Type", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty mappedEntityLength = mappedEntity.AddStructuralProperty("Length", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty mappedEntityBagOfPrimitiveToLinks = mappedEntity.AddStructuralProperty("BagOfPrimitiveToLinks", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetString(false))); EdmStructuralProperty mappedEntityBagOfDecimals = mappedEntity.AddStructuralProperty("BagOfDecimals", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetDecimal(false))); EdmStructuralProperty mappedEntityBagOfDoubles = mappedEntity.AddStructuralProperty("BagOfDoubles", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetDouble(false))); EdmStructuralProperty mappedEntityBagOfSingles = mappedEntity.AddStructuralProperty("BagOfSingles", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetSingle(false))); EdmStructuralProperty mappedEntityBagOfBytes = mappedEntity.AddStructuralProperty("BagOfBytes", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetByte(false))); EdmStructuralProperty mappedEntityBagOfInt16s = mappedEntity.AddStructuralProperty("BagOfInt16s", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetInt16(false))); EdmStructuralProperty mappedEntityBagOfInt32s = mappedEntity.AddStructuralProperty("BagOfInt32s", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetInt32(false))); EdmStructuralProperty mappedEntityBagOfInt64s = mappedEntity.AddStructuralProperty("BagOfInt64s", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetInt64(false))); EdmStructuralProperty mappedEntityBagOfGuids = mappedEntity.AddStructuralProperty("BagOfGuids", EdmCoreModel.GetCollection(EdmCoreModel.Instance.GetGuid(false))); EdmStructuralProperty mappedEntityBagOfComplexToCategories = mappedEntity.AddStructuralProperty("BagOfComplexToCategories", EdmCoreModel.GetCollection(new EdmComplexTypeReference(category, false))); model.AddElement(mappedEntity); EdmEntityType car = new EdmEntityType("DefaultNamespace", "Car"); EdmStructuralProperty carVin = car.AddStructuralProperty("VIN", EdmCoreModel.Instance.GetInt32(false)); car.AddKeys(carVin); EdmStructuralProperty carDescription = car.AddStructuralProperty("Description", EdmCoreModel.Instance.GetString(false, 100, null, true)); EdmStructuralProperty carPhoto = car.AddStructuralProperty("Photo", EdmCoreModel.Instance.GetStream(false)); EdmStructuralProperty carVideo = car.AddStructuralProperty("Video", EdmCoreModel.Instance.GetStream(false)); model.AddElement(car); EdmEntityType person = new EdmEntityType("DefaultNamespace", "Person"); EdmStructuralProperty personId = person.AddStructuralProperty("PersonId", EdmCoreModel.Instance.GetInt32(false)); person.AddKeys(personId); EdmStructuralProperty personName = person.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(false)); model.AddElement(person); EdmEntityType employee = new EdmEntityType("DefaultNamespace", "Employee", person); EdmStructuralProperty employeeManagerId = employee.AddStructuralProperty("ManagersPersonId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty employeeSalary = employee.AddStructuralProperty("Salary", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty employeeTitle = employee.AddStructuralProperty("Title", EdmCoreModel.Instance.GetString(false)); model.AddElement(employee); EdmEntityType specialEmployee = new EdmEntityType("DefaultNamespace", "SpecialEmployee", employee); EdmStructuralProperty specialEmployeeCarsVIN = specialEmployee.AddStructuralProperty("CarsVIN", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty specialEmployeeBonus = specialEmployee.AddStructuralProperty("Bonus", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty specialEmployeeIsFullyVested = specialEmployee.AddStructuralProperty("IsFullyVested", EdmCoreModel.Instance.GetBoolean(false)); model.AddElement(specialEmployee); EdmEntityType personMetadata = new EdmEntityType("DefaultNamespace", "PersonMetadata"); EdmStructuralProperty personMetadataId = personMetadata.AddStructuralProperty("PersonMetadataId", EdmCoreModel.Instance.GetInt32(false)); personMetadata.AddKeys(personMetadataId); EdmStructuralProperty personMetadataPersonId = personMetadata.AddStructuralProperty("PersonId", EdmCoreModel.Instance.GetInt32(false)); EdmStructuralProperty personMetadataPropertyName = personMetadata.AddStructuralProperty("PropertyName", EdmCoreModel.Instance.GetString(false)); EdmStructuralProperty personMetadataPropertyValue = personMetadata.AddStructuralProperty("PropertyValue", EdmCoreModel.Instance.GetString(false)); model.AddElement(personMetadata); EdmNavigationProperty customerToOrders = customer.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Orders", Target = order, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Customer", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, DependentProperties = new[] { orderCustomerId }, PrincipalProperties = customer.Key() }); EdmNavigationProperty customerToLogins = customer.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Logins", Target = login, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Customer", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new [] { loginCustomerId }, PrincipalProperties = customer.Key()}); EdmNavigationProperty customerToHusband = customer.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Husband", Target = customer, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Wife", TargetMultiplicity = EdmMultiplicity.ZeroOrOne }); EdmNavigationProperty customerToInfo = customer.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Info", Target = customerInfo, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Customer", TargetMultiplicity = EdmMultiplicity.One }); EdmNavigationProperty customerToComplaint = customer.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Complaints", Target = complaint, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Customer", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, DependentProperties = new[] { complaintCustomerId }, PrincipalProperties = customer.Key() }); EdmNavigationProperty barcodeToProduct = barcode.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Product", Target = product, TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { barcodeProductId }, PrincipalProperties = product.Key() }, new EdmNavigationPropertyInfo() { Name = "Barcodes", TargetMultiplicity = EdmMultiplicity.Many }); EdmNavigationProperty barcodeToExpectedIncorrectScans = barcode.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "BadScans", Target = incorrectScan, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "ExpectedBarcode", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { incorrectScanExpectedCode }, PrincipalProperties = barcode.Key() }); EdmNavigationProperty barcodeToActualIncorrectScans = barcode.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "GoodScans", Target = incorrectScan, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "ActualBarcode", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, DependentProperties = new[] { incorrectScanActualCode }, PrincipalProperties = barcode.Key()}); EdmNavigationProperty barcodeToBarcodeDetail = barcode.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Detail", Target = barcodeDetail, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Barcode", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { barcodeDetailCode }, PrincipalProperties = barcode.Key()}); EdmNavigationProperty complaintToResolution = complaint.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Resolution", Target = resolution, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Complaint", TargetMultiplicity = EdmMultiplicity.One }); EdmNavigationProperty loginToLastLogin = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "LastLogin", Target = lastLogin, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { lastLoginUsername }, PrincipalProperties = login.Key()}); EdmNavigationProperty loginToSentMessages = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "SentMessages", Target = message, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Sender", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { messageFromUsername }, PrincipalProperties = login.Key()}); EdmNavigationProperty loginToReceivedMessages = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "ReceivedMessages", Target = message, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Recipient", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { messageToUsername }, PrincipalProperties = login.Key()}); EdmNavigationProperty loginToOrders = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Orders", Target = order, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.ZeroOrOne }); EdmNavigationProperty loginToSmartCard = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "SmartCard", Target = smartCard, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { smartCardUsername }, PrincipalProperties = login.Key()}); EdmNavigationProperty loginToRsaToken = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "RSAToken", Target = rsaToken, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.One }); EdmNavigationProperty loginToPasswordReset = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "PasswordResets", Target = passwordReset, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { passwordResetUsername }, PrincipalProperties = login.Key()}); EdmNavigationProperty loginToPageView = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "PageViews", Target = pageView, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { pageViewUsername }, PrincipalProperties = login.Key()}); EdmNavigationProperty loginToSuspiciousActivity = login.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "SuspiciousActivity", Target = suspiciousActivity, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Login", TargetMultiplicity = EdmMultiplicity.ZeroOrOne }); EdmNavigationProperty smartCardToLastLogin = smartCard.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "LastLogin", Target = lastLogin, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "SmartCard", TargetMultiplicity = EdmMultiplicity.ZeroOrOne }); EdmNavigationProperty orderToOrderLines = order.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "OrderLines", Target = orderLine, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Order", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { orderLineOrderId }, PrincipalProperties = order.Key()}); EdmNavigationProperty orderToOrderNotes = EdmNavigationProperty.CreateNavigationPropertyWithPartner( new EdmNavigationPropertyInfo() { Name = "Notes", Target = orderNote, TargetMultiplicity = EdmMultiplicity.Many, OnDelete = EdmOnDeleteAction.Cascade }, new EdmNavigationPropertyInfo() { Name = "Order", Target = order, TargetMultiplicity = EdmMultiplicity.One }); order.AddProperty(orderToOrderNotes); orderNote.AddProperty(orderToOrderNotes.Partner); EdmNavigationProperty orderToOrderQualityCheck = order.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "OrderQualityCheck", Target = orderQualityCheck, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Order", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { orderQualityCheckId }, PrincipalProperties = order.Key()}); EdmNavigationProperty orderLineToProduct = orderLine.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Product", Target = product, TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { orderLineProductId }, PrincipalProperties = product.Key()}, new EdmNavigationPropertyInfo() { Name = "OrderLines", TargetMultiplicity = EdmMultiplicity.Many }); EdmNavigationProperty productToRelatedProducts = product.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "RelatedProducts", Target = product, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "ProductToRelatedProducts", TargetMultiplicity = EdmMultiplicity.One }); EdmNavigationProperty productToSuppliers = product.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Suppliers", Target = supplier, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Products", TargetMultiplicity = EdmMultiplicity.Many }); EdmNavigationProperty productToProductDetail = product.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Detail", Target = productDetail, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Product", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { productDetailProductId }, PrincipalProperties = product.Key()}); EdmNavigationProperty productToProductReviews = product.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Reviews", Target = productReview, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Product", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { productReviewProductId }, PrincipalProperties = product.Key()}); EdmNavigationProperty productToProductPhotos = product.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Photos", Target = productPhoto, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Product", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { productPhotoProductId }, PrincipalProperties = product.Key()}); EdmNavigationProperty productReviewToProductWebFeatures = productReview.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Features", Target = productWebFeature, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Review", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, DependentProperties = new[] { productWebFeatureReviewId, productWebFeatureProductId }, PrincipalProperties = productReview.Key()}); EdmNavigationProperty productPhotoToProductWebFeatures = productPhoto.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Features", Target = productWebFeature, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Photo", TargetMultiplicity = EdmMultiplicity.ZeroOrOne, DependentProperties = new[] { productWebFeaturePhotoId, productWebFeatureProductId }, PrincipalProperties = productPhoto.Key()}); EdmNavigationProperty supplierToSupplierLogo = supplier.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Logo", Target = supplierLogo, TargetMultiplicity = EdmMultiplicity.ZeroOrOne }, new EdmNavigationPropertyInfo() { Name = "Supplier", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { supplierLogoSupplierId }, PrincipalProperties = supplier.Key()}); EdmNavigationProperty supplierToSupplierInfo = EdmNavigationProperty.CreateNavigationPropertyWithPartner( new EdmNavigationPropertyInfo() { Name = "SupplierInfo", Target = supplierInfo, TargetMultiplicity = EdmMultiplicity.Many, OnDelete = EdmOnDeleteAction.Cascade }, new EdmNavigationPropertyInfo() { Name = "Supplier", Target = supplier, TargetMultiplicity = EdmMultiplicity.One }); supplier.AddProperty(supplierToSupplierInfo); supplierInfo.AddProperty(supplierToSupplierInfo.Partner); EdmNavigationProperty computerToComputerDetail = computer.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "ComputerDetail", Target = computerDetail, TargetMultiplicity = EdmMultiplicity.One }, new EdmNavigationPropertyInfo() { Name = "Computer", TargetMultiplicity = EdmMultiplicity.One }); EdmNavigationProperty driverTolicense = driver.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "License", Target = license, TargetMultiplicity = EdmMultiplicity.One }, new EdmNavigationPropertyInfo() { Name = "Driver", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { licenseName }, PrincipalProperties = driver.Key()}); EdmNavigationProperty personToPersonMetadata = person.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "PersonMetadata", Target = personMetadata, TargetMultiplicity = EdmMultiplicity.Many }, new EdmNavigationPropertyInfo() { Name = "Person", TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { personMetadataPersonId }, PrincipalProperties = person.Key()}); EdmNavigationProperty employeeToManager = employee.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Manager", Target = employee, TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { employeeManagerId }, PrincipalProperties = employee.Key()}, new EdmNavigationPropertyInfo() { Name = "EmployeeToManager", TargetMultiplicity = EdmMultiplicity.Many }); EdmNavigationProperty specialEmployeeToCar = specialEmployee.AddBidirectionalNavigation( new EdmNavigationPropertyInfo() { Name = "Car", Target = car, TargetMultiplicity = EdmMultiplicity.One, DependentProperties = new[] { specialEmployeeCarsVIN }, PrincipalProperties = car.Key()}, new EdmNavigationPropertyInfo() { Name = "SpecialEmployee", TargetMultiplicity = EdmMultiplicity.Many }); EdmOperation getPrimitiveString = new EdmFunction("DefaultNamespace", "GetPrimitiveString", EdmCoreModel.Instance.GetString(true)); model.AddElement(getPrimitiveString); EdmOperation getSpecificCustomer = new EdmFunction("DefaultNamespace", "GetSpecificCustomer", EdmCoreModel.GetCollection(new EdmEntityTypeReference(customer, true))); getSpecificCustomer.AddParameter("Name", EdmCoreModel.Instance.GetString(false)); model.AddElement(getSpecificCustomer); EdmOperation getCustomerCount = new EdmFunction("DefaultNamespace", "GetCustomerCount", EdmCoreModel.Instance.GetInt32(true)); model.AddElement(getCustomerCount); EdmOperation getArgumentPlusOne = new EdmFunction("DefaultNamespace", "GetArgumentPlusOne", EdmCoreModel.Instance.GetInt32(true)); getArgumentPlusOne.AddParameter("arg1", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(getArgumentPlusOne); EdmOperation entityProjectionReturnsCollectionOfComplexTypes = new EdmFunction("DefaultNamespace", "EntityProjectionReturnsCollectionOfComplexTypes", EdmCoreModel.GetCollection(new EdmComplexTypeReference(contact, true))); model.AddElement(entityProjectionReturnsCollectionOfComplexTypes); EdmOperation setArgumentPlusOne = new EdmAction("DefaultNamespace", "SetArgumentPlusOne", EdmCoreModel.Instance.GetInt32(true)); setArgumentPlusOne.AddParameter("arg1", EdmCoreModel.Instance.GetInt32(false)); model.AddElement(setArgumentPlusOne); EdmEntityContainer container = new EdmEntityContainer("DefaultNamespace", "DefaultContainer"); model.AddElement(container); EdmEntitySet carSet = container.AddEntitySet("Car", car); EdmEntitySet customerSet = container.AddEntitySet("Customer", customer); EdmEntitySet barcodeSet = container.AddEntitySet("Barcode", barcode); EdmEntitySet incorrectScanSet = container.AddEntitySet("IncorrectScan", incorrectScan); EdmEntitySet barcodeDetailSet = container.AddEntitySet("BarcodeDetail", barcodeDetail); EdmEntitySet complaintSet = container.AddEntitySet("Complaint", complaint); EdmEntitySet resolutionSet = container.AddEntitySet("Resolution", resolution); EdmEntitySet loginSet = container.AddEntitySet("Login", login); EdmEntitySet suspiciousActivitySet = container.AddEntitySet("SuspiciousActivity", suspiciousActivity); EdmEntitySet smartCardSet = container.AddEntitySet("SmartCard", smartCard); EdmEntitySet rsaTokenSet = container.AddEntitySet("RSAToken", rsaToken); EdmEntitySet passwordResetSet = container.AddEntitySet("PasswordReset", passwordReset); EdmEntitySet pageViewSet = container.AddEntitySet("PageView", pageView); EdmEntitySet lastLoginSet = container.AddEntitySet("LastLogin", lastLogin); EdmEntitySet messageSet = container.AddEntitySet("Message", message); EdmEntitySet orderSet = container.AddEntitySet("Order", order); EdmEntitySet orderNoteSet = container.AddEntitySet("OrderNote", orderNote); EdmEntitySet orderQualityCheckSet = container.AddEntitySet("OrderQualityCheck", orderQualityCheck); EdmEntitySet orderLineSet = container.AddEntitySet("OrderLine", orderLine); EdmEntitySet productSet = container.AddEntitySet("Product", product); EdmEntitySet productDetailSet = container.AddEntitySet("ProductDetail", productDetail); EdmEntitySet productReviewSet = container.AddEntitySet("ProductReview", productReview); EdmEntitySet productPhotoSet = container.AddEntitySet("ProductPhoto", productPhoto); EdmEntitySet productWebFeatureSet = container.AddEntitySet("ProductWebFeature", productWebFeature); EdmEntitySet supplierSet = container.AddEntitySet("Supplier", supplier); EdmEntitySet supplierLogoSet = container.AddEntitySet("SupplierLogo", supplierLogo); EdmEntitySet supplierInfoSet = container.AddEntitySet("SupplierInfo", supplierInfo); EdmEntitySet customerInfoSet = container.AddEntitySet("CustomerInfo", customerInfo); EdmEntitySet computerSet = container.AddEntitySet("Computer", computer); EdmEntitySet computerDetailSet = container.AddEntitySet("ComputerDetail", computerDetail); EdmEntitySet driverSet = container.AddEntitySet("Driver", driver); EdmEntitySet licenseSet = container.AddEntitySet("License", license); EdmEntitySet mappedEntitySet = container.AddEntitySet("MappedEntityType", mappedEntity); EdmEntitySet personSet = container.AddEntitySet("Person", person); EdmEntitySet personMetadataSet = container.AddEntitySet("PersonMetadata", personMetadata); complaintSet.AddNavigationTarget(customerToComplaint.Partner, customerSet); loginSet.AddNavigationTarget(loginToSentMessages, messageSet); loginSet.AddNavigationTarget(loginToReceivedMessages, messageSet); customerInfoSet.AddNavigationTarget(customerToInfo.Partner, customerSet); supplierSet.AddNavigationTarget(supplierToSupplierInfo, supplierInfoSet); loginSet.AddNavigationTarget(loginToOrders, orderSet); orderSet.AddNavigationTarget(orderToOrderNotes, orderNoteSet); orderSet.AddNavigationTarget(orderToOrderQualityCheck, orderQualityCheckSet); supplierSet.AddNavigationTarget(supplierToSupplierLogo, supplierLogoSet); customerSet.AddNavigationTarget(customerToOrders, orderSet); customerSet.AddNavigationTarget(customerToLogins, loginSet); loginSet.AddNavigationTarget(loginToLastLogin, lastLoginSet); lastLoginSet.AddNavigationTarget(smartCardToLastLogin.Partner, smartCardSet); orderSet.AddNavigationTarget(orderToOrderLines, orderLineSet); productSet.AddNavigationTarget(orderLineToProduct.Partner, orderLineSet); productSet.AddNavigationTarget(productToRelatedProducts, productSet); productSet.AddNavigationTarget(productToProductDetail, productDetailSet); productSet.AddNavigationTarget(productToProductReviews, productReviewSet); productSet.AddNavigationTarget(productToProductPhotos, productPhotoSet); productWebFeatureSet.AddNavigationTarget(productPhotoToProductWebFeatures.Partner, productPhotoSet); productWebFeatureSet.AddNavigationTarget(productReviewToProductWebFeatures.Partner, productReviewSet); complaintSet.AddNavigationTarget(complaintToResolution, resolutionSet); barcodeSet.AddNavigationTarget(barcodeToExpectedIncorrectScans, incorrectScanSet); customerSet.AddNavigationTarget(customerToHusband.Partner, customerSet); barcodeSet.AddNavigationTarget(barcodeToActualIncorrectScans, incorrectScanSet); productSet.AddNavigationTarget(barcodeToProduct.Partner, barcodeSet); barcodeSet.AddNavigationTarget(barcodeToBarcodeDetail, barcodeDetailSet); loginSet.AddNavigationTarget(loginToSuspiciousActivity, suspiciousActivitySet); loginSet.AddNavigationTarget(loginToRsaToken, rsaTokenSet); loginSet.AddNavigationTarget(loginToSmartCard, smartCardSet); loginSet.AddNavigationTarget(loginToPasswordReset, passwordResetSet); loginSet.AddNavigationTarget(loginToPageView, pageViewSet); computerSet.AddNavigationTarget(computerToComputerDetail, computerDetailSet); driverSet.AddNavigationTarget(driverTolicense, licenseSet); personSet.AddNavigationTarget(personToPersonMetadata, personMetadataSet); productSet.AddNavigationTarget(productToSuppliers, supplierSet); carSet.AddNavigationTarget(specialEmployeeToCar.Partner, personSet); personSet.AddNavigationTarget(employeeToManager, personSet); this.BasicConstructibleModelTestSerializingStockModel(ODataTestModelBuilder.ODataTestModelDefaultModel, 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 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 void BoundOperationWithEntitySetPathShouldWriteEntitySetPathAttributeWithCorrectValue() { EdmAction action = new EdmAction("Default.Namespace", "Checkout", null /*returnType*/, true /*isBound*/, new EdmPathExpression("Customer", "Orders") /*entitySetPath*/); action.AddParameter("param", EdmCoreModel.Instance.GetString(true)); this.TestWriteActionElementHeaderMethod(action, @"<Action Name=""Checkout"" IsBound=""true"" EntitySetPath=""Customer/Orders"""); }
static ODataAvroScenarioTests() { var type = new EdmEntityType("Microsoft.Test.OData.PluggableFormat.Avro.Test", "Product"); type.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32, false); type.AddStructuralProperty("Weight", EdmPrimitiveTypeKind.Single, false); EntryType = type; var cpx = new EdmComplexType("Microsoft.Test.OData.PluggableFormat.Avro.Test", "Address"); cpx.AddStructuralProperty("Road", EdmPrimitiveTypeKind.String, false); cpx.AddStructuralProperty("ZipCode", EdmPrimitiveTypeKind.String, false); ComplexType = cpx; var action = new EdmAction("Microsoft.Test.OData.PluggableFormat.Avro.Test", "AddProduct", null); action.AddParameter("Product", new EdmEntityTypeReference(EntryType, false)); action.AddParameter("Location", new EdmComplexTypeReference(ComplexType, false)); AddProduct = action; action = new EdmAction("Microsoft.Test.OData.PluggableFormat.Avro.Test", "GetMaxId", EdmCoreModel.Instance.GetInt32(false)); action.AddParameter("Products", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(EntryType, false)))); GetMaxId = action; }
static FullPayloadValidateTests() { EntityType = new EdmEntityType("Namespace", "EntityType", null, false, false, false); EntityType.AddKeys(EntityType.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); EntityType.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(isNullable: true), null, EdmConcurrencyMode.Fixed); DerivedType = new EdmEntityType("Namespace", "DerivedType", EntityType, false, true); var expandedCollectionNavProp = EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "ExpandedCollectionNavProp" }); var expandedNavProp = EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.One, Name = "ExpandedNavProp" }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "ContainedCollectionNavProp", ContainsTarget = true }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.One, Name = "ContainedNavProp", ContainsTarget = true }); var container = new EdmEntityContainer("Namespace", "Container"); EntitySet = container.AddEntitySet("EntitySet", EntityType); EntitySet.AddNavigationTarget(expandedNavProp, EntitySet); EntitySet.AddNavigationTarget(expandedCollectionNavProp, EntitySet); Model = new EdmModel(); Model.AddElement(EntityType); Model.AddElement(DerivedType); Model.AddElement(container); ModelWithFunction = new EdmModel(); ModelWithFunction.AddElement(EntityType); ModelWithFunction.AddElement(DerivedType); ModelWithFunction.AddElement(container); EdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(EntityType, false); EdmCollectionTypeReference typeReference = new EdmCollectionTypeReference(new EdmCollectionType(entityTypeReference)); EdmFunction function = new EdmFunction("Namespace", "Function", EdmCoreModel.Instance.GetBoolean(true), true, null, false); function.AddParameter("bindingParameter", typeReference); ModelWithFunction.AddElement(function); EdmAction action = new EdmAction("Namespace", "Action", EdmCoreModel.Instance.GetBoolean(true), true, null); action.AddParameter("bindingParameter", typeReference); ModelWithFunction.AddElement(action); }
public void GetActionLinkBuilderForFeed_ReturnsDefaultActionLinkBuilder_IfNotSet() { // Arrange IEdmModel model = new EdmModel(); IEdmEntityContainer container = new EdmEntityContainer("NS", "Container"); EdmAction action = new EdmAction("NS", "Action", returnType: null); action.AddParameter("entityset", new EdmCollectionTypeReference( new EdmCollectionType(new EdmEntityTypeReference(new EdmEntityType("NS", "Customer"), false)))); // Act ActionLinkBuilder builder = model.GetActionLinkBuilder(action); // Assert Assert.NotNull(builder); Assert.Null(builder.LinkFactory); Assert.NotNull(builder.FeedLinkFactory); Assert.IsType<Func<FeedContext, Uri>>(builder.FeedLinkFactory); }
private static IEdmAction AddBindableAction(EdmModel model, string name, IEdmEntityType bindingType, bool isCollection) { IEdmEntityContainer container = model.EntityContainer; var action = new EdmAction( container.Namespace, name, returnType: null, isBound: true, entitySetPathExpression: null); IEdmTypeReference bindingParamterType = new EdmEntityTypeReference(bindingType, isNullable: false); if (isCollection) { bindingParamterType = new EdmCollectionTypeReference(new EdmCollectionType(bindingParamterType)); } action.AddParameter("bindingParameter", bindingParamterType); model.AddElement(action); return action; }
static AutoComputePayloadMetadataInJsonIntegrationTests() { EntityType = new EdmEntityType("Namespace", "EntityType", null, false, false, true); EntityType.AddKeys(EntityType.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); EntityType.AddStructuralProperty("StreamProp1", EdmPrimitiveTypeKind.Stream); EntityType.AddStructuralProperty("StreamProp2", EdmPrimitiveTypeKind.Stream); EntityType.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(isNullable: true), null, EdmConcurrencyMode.Fixed); DerivedType = new EdmEntityType("Namespace", "DerivedType", EntityType, false, true); AnotherEntityType = new EdmEntityType("Namespace", "AnotherEntityType", null, false, false, true); AnotherEntityType.AddKeys(AnotherEntityType.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); AnotherEntityType.AddStructuralProperty("Name", EdmCoreModel.Instance.GetString(isNullable: true), null, EdmConcurrencyMode.Fixed); var deferredNavLinkProp = EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "DeferredNavLink" }); var expandedNavLinkProp = EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "ExpandedNavLink" }); var navLinkDeclaredOnlyInModelProp = EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "NavLinkDeclaredOnlyInModel" }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "ContainedNavProp", ContainsTarget = true }); DerivedType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "DerivedContainedNavProp", ContainsTarget = true }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.One, Name = "ContainedNonCollectionNavProp", ContainsTarget = true }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = AnotherEntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "AnotherContainedNavProp", ContainsTarget = true }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = AnotherEntityType, TargetMultiplicity = EdmMultiplicity.One, Name = "AnotherContainedNonCollectionNavProp", ContainsTarget = true }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.One, Name = "UnknownNonCollectionNavProp", ContainsTarget = false }); EntityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Target = EntityType, TargetMultiplicity = EdmMultiplicity.Many, Name = "UnknownCollectionNavProp", ContainsTarget = false }); var container = new EdmEntityContainer("Namespace", "Container"); EntitySet = container.AddEntitySet("EntitySet", EntityType); EntitySet.AddNavigationTarget(deferredNavLinkProp, EntitySet); EntitySet.AddNavigationTarget(expandedNavLinkProp, EntitySet); EntitySet.AddNavigationTarget(navLinkDeclaredOnlyInModelProp, EntitySet); Model = new EdmModel(); Model.AddElement(EntityType); Model.AddElement(DerivedType); Model.AddElement(AnotherEntityType); Model.AddElement(container); var alwaysBindableAction1 = new EdmAction("Namespace", "AlwaysBindableAction1", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); alwaysBindableAction1.AddParameter(new EdmOperationParameter(alwaysBindableAction1, "p", new EdmEntityTypeReference(EntityType, isNullable: true))); Model.AddElement(alwaysBindableAction1); var alwaysBindableActionImport1 = new EdmActionImport(container, "AlwaysBindableAction1", alwaysBindableAction1); container.AddElement(alwaysBindableActionImport1); var alwaysBindableAction2 = new EdmAction("Namespace", "AlwaysBindableAction2", null /*returnType*/, true /*isBound*/, null /*entitySetPath*/); alwaysBindableAction2.AddParameter(new EdmOperationParameter(alwaysBindableAction2, "p", new EdmEntityTypeReference(EntityType, isNullable: true))); Model.AddElement(alwaysBindableAction2); var alwaysBindableActionImport2 = new EdmActionImport(container, "AlwaysBindableAction2", alwaysBindableAction2); container.AddElement(alwaysBindableActionImport2); var action1 = new EdmAction("Namespace", "Action1", null /*returnType*/, false /*isBound*/, null /*entitySetPath*/); action1.AddParameter(new EdmOperationParameter(action1, "p", new EdmEntityTypeReference(EntityType, isNullable: true))); Model.AddElement(action1); var actionImport1 = new EdmActionImport(container, "Action1", action1); container.AddElement(actionImport1); var action2 = new EdmAction("Namespace", "Action1", null /*returnType*/, false /*isBound*/, null /*entitySetPath*/); action2.AddParameter(new EdmOperationParameter(action2, "p", new EdmEntityTypeReference(EntityType, isNullable: true))); Model.AddElement(action2); var actionImport2 = new EdmActionImport(container, "Action1", action2); container.AddElement(actionImport2); var alwaysBindableFunction1 = new EdmFunction("Namespace", "AlwaysBindableFunction1", EdmCoreModel.Instance.GetString(isNullable: true), true /*isBound*/, null /*entitySetPath*/, false /*iscomposable*/); alwaysBindableFunction1.AddParameter("p", new EdmEntityTypeReference(EntityType, isNullable: true)); Model.AddElement(alwaysBindableFunction1); var alwaysBindableFunctionImport1 = new EdmFunctionImport(container, "AlwaysBindableFunction1", alwaysBindableFunction1); container.AddElement(alwaysBindableFunctionImport1); var alwaysBindableFunction2 = new EdmFunction("Namespace", "AlwaysBindableFunction2", EdmCoreModel.Instance.GetString(isNullable: true), true /*isBound*/, null /*entitySetPath*/, false /*iscomposable*/); alwaysBindableFunction2.AddParameter("p", new EdmEntityTypeReference(EntityType, isNullable: true)); Model.AddElement(alwaysBindableFunction2); var alwaysBindableFunctionImport2 = new EdmFunctionImport(container, "AlwaysBindableFunction2", alwaysBindableFunction2); container.AddElement(alwaysBindableFunctionImport2); var function1 = new EdmFunction("Namespace", "Function1", EdmCoreModel.Instance.GetString(isNullable: true), false /*isBound*/, null /*entitySetPath*/, false /*iscomposable*/); function1.AddParameter("p", new EdmEntityTypeReference(EntityType, isNullable: true)); Model.AddElement(function1); var functionImport1 = new EdmFunctionImport(container, "Function1", function1); container.AddElement(functionImport1); var function2 = new EdmFunction("Namespace", "Function1", EdmCoreModel.Instance.GetString(isNullable: true), false /*isBound*/, null /*entitySetPath*/, false /*iscomposable*/); function2.AddParameter("p", new EdmEntityTypeReference(EntityType, isNullable: true)); Model.AddElement(function2); var functionImport2 = new EdmFunctionImport(container, "Function1", function2); container.AddElement(functionImport2); var function3 = new EdmFunction("Namespace", "Function3", new EdmEntityTypeReference(EntityType, false), true /*isBound*/, new EdmPathExpression("p/ContainedNonCollectionNavProp"), false /*iscomposable*/); function3.AddParameter("p", new EdmEntityTypeReference(EntityType, isNullable: true)); Model.AddElement(function3); }
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 void FilterBoundOperationsWithSameTypeHierarchyToTypeClosestToBindingTypeShouldNotThrowAndFilterNonBoundOperations() { EdmEntityType aType = new EdmEntityType("N", "A"); EdmAction action = new EdmAction("namespace", "action", null, false, null); action.AddParameter("bindingParameter", new EdmEntityTypeReference(aType, false)); var filteredResults = new IEdmOperation[] { action }.FilterBoundOperationsWithSameTypeHierarchyToTypeClosestToBindingType(aType).ToList(); filteredResults.Should().HaveCount(0); }