Esempio n. 1
0
        /// <summary>
        /// Adds a navigation property
        /// </summary>
        /// <param name="navigation">the navigation property</param>
        /// <param name="hide">whether to make the navigation property invisible as a member of the type</param>
        public void Add(IEdmNavigationProperty navigation, bool hide = false)
        {
            if (!hide)
            {
                this.declaredProperties.Add(navigation);
            }

            StubEdmNavigationProperty stubNavigationProperty = navigation as StubEdmNavigationProperty;

            if (stubNavigationProperty != null)
            {
                stubNavigationProperty.DeclaringType = this;
            }
        }
        public static IEdmModel AllInterfaceCriticalModel()
        {
            var model = new EdmModel();
            var valueTerm = new EdmTerm("DefaultNamespace", "Note", EdmCoreModel.Instance.GetString(true));
            model.AddElement(valueTerm);

            var badString = new CustomStringConstant("foo", EdmExpressionKind.None, EdmValueKind.Integer);

            var valueAnnotation = new EdmAnnotation(
                valueTerm,
                valueTerm,
                badString);
            model.AddVocabularyAnnotation(valueAnnotation);

            var mutableValueAnnotationueAnnotation = new MutableValueAnnotation()
            {
                Target = valueTerm
            };

            model.AddVocabularyAnnotation(mutableValueAnnotationueAnnotation);
            
            var customEntity = new CustomEntityType(new List<IEdmProperty>() { null });
            model.AddElement(customEntity);

            var entity = new EdmEntityType("DefaultNamespace", "bar");
            var entity2 = new EdmEntityType("DefaultNamespace", "bar2");
            var navProperty = new StubEdmNavigationProperty("Nav")
            {
                DeclaringType = entity,
                Type = new EdmEntityTypeReference(entity2, false)
            };

            navProperty.Partner = navProperty;
            entity.AddProperty(navProperty);
            model.AddElement(entity);
            model.AddElement(entity2);

            return model;
        }
        public void TestManytoManyRelationshipWithOneNavigiationPropertyInOneOfThem()
        {
            var expectedErrors = new EdmLibTestErrors()
            {
                { null, null, EdmErrorCode.InterfaceCriticalNavigationPartnerInvalid }
            };

            var entity1 = new EdmEntityType("DefaultNamespace", "Entity1");
            var entity2 = new EdmEntityType("DefaultNamespace", "Entity2");

            var navProperty1 = new StubEdmNavigationProperty("Nav1")
            {
                DeclaringType = entity1,
                Type = new EdmEntityTypeReference(entity2, false),
            };

            var navProperty2 = new StubEdmNavigationProperty("Nav2")
            {
                DeclaringType = entity1,
                Type = new EdmEntityTypeReference(entity2, false),
            };

            var navProperty3 = new StubEdmNavigationProperty("Nav3")
            {
                DeclaringType = entity2,
                Type = new EdmEntityTypeReference(entity1, false),
            };

            navProperty1.Partner = navProperty3;
            navProperty2.Partner = navProperty3;
            navProperty3.Partner = navProperty1;

            entity1.AddProperty(navProperty1);
            entity1.AddProperty(navProperty2);
            entity2.AddProperty(navProperty3);

            var model = new EdmModel();
            model.AddElement(entity1);
            model.AddElement(entity2);

            this.ValidateUsingEdmValidator(model, expectedErrors);
        }
        public void TestElementInterfaceCriticalPropertyValueMustNotBeNull()
        {
            var expectedErrors = new EdmLibTestErrors()
            {
                { null, null, EdmErrorCode.InterfaceCriticalPropertyValueMustNotBeNull }
            };

            var baseEntity = new EdmEntityType("DefaultNamespace", "BaseEntity");
            var navProperty = new StubEdmNavigationProperty("Nav")
            {
                DeclaringType = baseEntity,
                Partner = new StubEdmNavigationProperty("Partner") { DeclaringType = baseEntity, Type = new EdmEntityTypeReference(baseEntity, false) }
            };
            baseEntity.AddProperty(navProperty);

            this.ValidateElement(navProperty, expectedErrors);
            this.ValidateElement(baseEntity, expectedErrors);

            expectedErrors = new EdmLibTestErrors();
            var entity = new EdmEntityType("DefaultNamespace", "Entity", baseEntity);
            this.ValidateElement(entity, expectedErrors);
        }
        public void TestElementInterfaceCriticalEntityTypeBaseType()
        {
            var expectedErrors = new EdmLibTestErrors()
            {
                { null, null, EdmErrorCode.InterfaceCriticalNavigationPartnerInvalid }
            };

            var baseEntity = new EdmEntityType("DefaultNamespace", "baseEntity");
            var entity2 = new EdmEntityType("DefaultNamespace", "Entity2");
            var navProperty = new StubEdmNavigationProperty("Nav")
            {
                DeclaringType = baseEntity,
                Type = new EdmEntityTypeReference(entity2, false)
            };

            navProperty.Partner = navProperty;
            baseEntity.AddProperty(navProperty);

            this.ValidateElement(baseEntity, expectedErrors);

            var entity = new EdmEntityType("DefaultNamespace", "Entity1", baseEntity);
            expectedErrors = new EdmLibTestErrors();
            this.ValidateElement(entity, expectedErrors);
        }
        public static IEdmModel ModelWithNavigationPropertyWithBadType()
        {
            EdmModel model = new EdmModel();

            var entity1 = new EdmEntityType("Foo", "Bar");
            var id1 = entity1.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity1.AddKeys(id1);

            var entity2 = new EdmEntityType("Foo", "Baz");
            var id2 = entity2.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity2.AddKeys(id2);

            var complexType = new EdmComplexType("Foo", "Bas");
            complexType.AddStructuralProperty("Data", EdmCoreModel.Instance.GetString(true));

            StubEdmNavigationProperty navProp = new StubEdmNavigationProperty("NavProp")
            {
                DeclaringType = entity2,
                Type = EdmCoreModel.Instance.GetSingle(false),
                Partner = new StubEdmNavigationProperty("Partner") { DeclaringType = entity1, Type = new EdmEntityTypeReference(entity2, false) }
            };
            ((StubEdmNavigationProperty)navProp.Partner).Partner = navProp;
            entity2.AddProperty(navProp);

            EdmNavigationProperty navProp2 = entity2.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "CollectionNavProp", Target = entity1, TargetMultiplicity = EdmMultiplicity.Many });

            StubEdmNavigationProperty navProp3 = new StubEdmNavigationProperty("ComplexNavProp")
            {
                DeclaringType = entity2,
                Type = new EdmComplexTypeReference(complexType, false),
                Partner = new StubEdmNavigationProperty("Partner") { DeclaringType = entity1, Type = new EdmEntityTypeReference(entity2, false) }
            };
            ((StubEdmNavigationProperty)navProp3.Partner).Partner = navProp3;
            entity2.AddProperty(navProp3);

            model.AddElement(entity1);
            model.AddElement(entity2);
            model.AddElement(complexType);

            return model;
        }
        public static IEdmModel ModelWithReferentialConstraintWhoseDependentPropertiesNotPartOfDependentEntity()
        {
            EdmModel model = new EdmModel();

            var entity1 = new EdmEntityType("Foo", "Bar");
            var id1 = new EdmStructuralProperty(entity1, "Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity1.AddKeys(id1);

            var entity2 = new EdmEntityType("Foo", "Baz");
            var id2 = new EdmStructuralProperty(entity2, "Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity2.AddKeys(id2);

            StubEdmNavigationProperty navProp1 = new StubEdmNavigationProperty("ToBaz");
            StubEdmNavigationProperty navProp2 = new StubEdmNavigationProperty("ToBar");
            navProp1.Type = new EdmEntityTypeReference(entity2, false);
            navProp1.DeclaringType = entity1;
            navProp1.ReferentialConstraint = EdmReferentialConstraint.Create(new[] { new EdmStructuralProperty(entity2, "Id1", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None) }, entity2.Key());
            navProp1.Partner = navProp2;

            navProp2.Type = new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(entity1, false)));
            navProp2.DeclaringType = entity2;
            navProp2.Partner = navProp1;

            entity1.AddProperty(navProp1);
            entity2.AddProperty(navProp2);

            model.AddElement(entity1);
            model.AddElement(entity2);

            return model;
        }
        public static IEdmModel ModelWithInconsistentNavigationPropertyPartner()
        {
            EdmModel model = new EdmModel();

            var entity1 = new EdmEntityType("Foo", "Bar");
            var id1 = entity1.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity1.AddKeys(id1);

            var entity2 = new EdmEntityType("Foo", "Baz");
            var id2 = entity2.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity2.AddKeys(id2);

            var entity3 = new EdmEntityType("Foo", "Bas");
            var id3 = entity3.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity3.AddKeys(id3);

            StubEdmNavigationProperty entity1Navigation = new StubEdmNavigationProperty("ToBaz")
            {
                DeclaringType = entity1,
                Type = new EdmEntityTypeReference(entity1, true),
                Partner = new StubEdmNavigationProperty("Parner") { DeclaringType = entity2, Type = new EdmEntityTypeReference(entity1, true) }
            };
            ((StubEdmNavigationProperty)entity1Navigation.Partner).Partner = entity1Navigation;
            entity1.AddProperty(entity1Navigation);
            entity2.AddProperty(entity1Navigation.Partner);
            entity3.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "ToBar", Target = entity1, TargetMultiplicity = EdmMultiplicity.ZeroOrOne });

            model.AddElement(entity1);
            model.AddElement(entity2);
            model.AddElement(entity3);

            return model;
        }
        public static IEdmModel ModelWithCircularNavigationPartner()
        {
            EdmModel model = new EdmModel();

            var entity1 = new EdmEntityType("Foo", "Bar");
            var id1 = entity1.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity1.AddKeys(id1);

            var entity2 = new EdmEntityType("Foo", "Baz");
            var id2 = entity2.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity2.AddKeys(id2);

            var entity3 = new EdmEntityType("Foo", "Bas");
            var id3 = entity3.AddStructuralProperty("Id", EdmCoreModel.Instance.GetInt16(false), null, EdmConcurrencyMode.None);
            entity3.AddKeys(id3);

            StubEdmNavigationProperty entity1Navigation = new StubEdmNavigationProperty("ToBaz")
            {
                DeclaringType = entity1,
                Type = new EdmEntityTypeReference(entity2, true),
                Partner = new StubEdmNavigationProperty("ToBas") { DeclaringType = entity2, Type = new EdmEntityTypeReference(entity3, true) }
            };
            StubEdmNavigationProperty entity2Navigation = entity1Navigation.Partner as StubEdmNavigationProperty;
            entity2Navigation.Partner = entity1Navigation;
            StubEdmNavigationProperty entity3Navigation = new StubEdmNavigationProperty("ToBar")
            {
                DeclaringType = entity3,
                Type = new EdmEntityTypeReference(entity1, true),
            };
            entity3Navigation.Partner = entity1Navigation;
            entity1.AddProperty(entity1Navigation);
            entity2.AddProperty(entity2Navigation);
            entity3.AddProperty(entity3Navigation);

            model.AddElement(entity1);
            model.AddElement(entity2);
            model.AddElement(entity3);

            return model;
        }
        public static IEdmModel TypeTermWithNavigation()
        {
            StubEdmModel model = new StubEdmModel();
            var personTypeTerm = new StubTypeTerm("NS1", "Person")
            {
                new StubEdmStructuralProperty("Name") { Type = EdmCoreModel.Instance.GetString(false) },
            };
            model.Add(personTypeTerm);

            var reviewTypeTerm = new StubTypeTerm("NS1", "Review")
            {
                new StubEdmStructuralProperty("summary") { Type = EdmCoreModel.Instance.GetString(false) },
                new StubEdmStructuralProperty("itemName") { Type = EdmCoreModel.Instance.GetString(false) },
                new StubEdmStructuralProperty("dateReviewed") { Type = EdmCoreModel.Instance.GetDateTimeOffset(false) },
                new StubEdmStructuralProperty("rating") { Type = EdmCoreModel.Instance.GetInt32(false) },
            };
            model.Add(reviewTypeTerm);

            var toPerson = new StubEdmNavigationProperty("ToPerson") { Type = new EdmEntityTypeReference(personTypeTerm, false) };
            reviewTypeTerm.Add(toPerson);

            var toReviews = new StubEdmNavigationProperty("ToReviews") {Type = new EdmCollectionType(reviewTypeTerm.ToTypeReference(false)).ToTypeReference(false)};
            personTypeTerm.Add(toReviews);

            toPerson.Partner = toReviews;
            return model;
        }