/// <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; }