public void Apply_is_noop_when_unknown_dependent() { var model = new EdmModel().Initialize(); var associationType = new EdmAssociationType().Initialize(); var navigationProperty = new EdmNavigationProperty { Association = associationType }; var foreignKeyAnnotation = new ForeignKeyAttribute("AId"); navigationProperty.Annotations.SetClrAttributes(new[] { foreignKeyAnnotation }); ((IEdmConvention<EdmNavigationProperty>)new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, model); Assert.Null(associationType.Constraint); }
public void Apply_is_noop_when_unknown_dependent() { var model = new EdmModel(DataSpace.CSpace); var associationType = new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace); associationType.SourceEnd = new AssociationEndMember("S", new EntityType("E", "N", DataSpace.CSpace)); associationType.TargetEnd = new AssociationEndMember("T", new EntityType("E", "N", DataSpace.CSpace)); var navigationProperty = new NavigationProperty("N", TypeUsage.Create(associationType.TargetEnd.GetEntityType())) { RelationshipType = associationType }; var foreignKeyAnnotation = new ForeignKeyAttribute("AId"); navigationProperty.Annotations.SetClrAttributes(new[] { foreignKeyAnnotation }); ((IEdmConvention<NavigationProperty>)new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, model); Assert.Null(associationType.Constraint); }
public void Apply_generates_constraint_when_simple_fk() { var model = new EdmModel().Initialize(); var entityType = model.AddEntityType("E"); var associationType = model.AddAssociationType("A", entityType, EdmAssociationEndKind.Optional, entityType, EdmAssociationEndKind.Many); var navigationProperty = entityType.AddNavigationProperty("N", associationType); var fkProperty = entityType.AddPrimitiveProperty("Fk"); var foreignKeyAnnotation = new ForeignKeyAttribute("Fk"); navigationProperty.Annotations.SetClrAttributes(new[] { foreignKeyAnnotation }); ((IEdmConvention<EdmNavigationProperty>)new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, model); Assert.NotNull(associationType.Constraint); Assert.True(associationType.Constraint.DependentProperties.Contains(fkProperty)); }
public void Apply_generates_constraint_when_simple_fk() { var model = new EdmModel(DataSpace.CSpace); var entityType = model.AddEntityType("E"); var associationType = model.AddAssociationType( "A", entityType, RelationshipMultiplicity.ZeroOrOne, entityType, RelationshipMultiplicity.Many); var navigationProperty = entityType.AddNavigationProperty("N", associationType); var property = EdmProperty.Primitive("Fk", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)); entityType.AddMember(property); var fkProperty = property; var foreignKeyAnnotation = new ForeignKeyAttribute("Fk"); navigationProperty.Annotations.SetClrAttributes(new[] { foreignKeyAnnotation }); ((IEdmConvention<NavigationProperty>)new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, model); Assert.NotNull(associationType.Constraint); Assert.True(associationType.Constraint.ToProperties.Contains(fkProperty)); }
public void Apply_throws_with_empty_foreign_key_properties() { var model = new EdmModel(DataSpace.CSpace); var entityType = model.AddEntityType("E"); var mockType = new MockType(); entityType.Annotations.SetClrType(mockType); var associationType = model.AddAssociationType( "A", entityType, RelationshipMultiplicity.ZeroOrOne, entityType, RelationshipMultiplicity.Many); var navigationProperty = entityType.AddNavigationProperty("N", associationType); var foreignKeyAnnotation = new ForeignKeyAttribute(","); navigationProperty.Annotations.SetClrAttributes(new[] { foreignKeyAnnotation }); Assert.Equal( Strings.ForeignKeyAttributeConvention_EmptyKey("N", mockType.Object), Assert.Throws<InvalidOperationException>( () => ((IEdmConvention<NavigationProperty>)new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, model)).Message); }
public void Apply_throws_when_cannot_find_foreign_key_properties() { var model = new EdmModel().Initialize(); var entityType = model.AddEntityType("E"); var mockType = new MockType(); entityType.SetClrType(mockType); var associationType = model.AddAssociationType("A", entityType, EdmAssociationEndKind.Optional, entityType, EdmAssociationEndKind.Many); var navigationProperty = entityType.AddNavigationProperty("N", associationType); var foreignKeyAnnotation = new ForeignKeyAttribute("_Fk"); navigationProperty.Annotations.SetClrAttributes(new[] { foreignKeyAnnotation }); Assert.Equal(Strings.ForeignKeyAttributeConvention_InvalidKey("N", mockType.Object, "_Fk", mockType.Object), Assert.Throws<InvalidOperationException>(() => ((IEdmConvention<EdmNavigationProperty>)new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, model)).Message); }
public void Apply_throws_when_cannot_find_foreign_key_properties() { var model = new EdmModel(DataSpace.CSpace); var entityType = model.AddEntityType("E"); var mockType = new MockType(); entityType.GetMetadataProperties().SetClrType(mockType); var associationType = model.AddAssociationType( "A", entityType, RelationshipMultiplicity.ZeroOrOne, entityType, RelationshipMultiplicity.Many); var navigationProperty = entityType.AddNavigationProperty("N", associationType); var foreignKeyAnnotation = new ForeignKeyAttribute("_Fk"); navigationProperty.GetMetadataProperties().SetClrAttributes(new[] { foreignKeyAnnotation }); Assert.Equal( Strings.ForeignKeyAttributeConvention_InvalidKey("N", mockType.Object, "_Fk", mockType.Object), Assert.Throws<InvalidOperationException>( () => (new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, new DbModel(model, null))).Message); }
public void Apply_generates_constraint_when_composite_fk() { var model = new EdmModel(DataSpace.CSpace); var entityType = model.AddEntityType("E"); var associationType = model.AddAssociationType( "A", entityType, RelationshipMultiplicity.ZeroOrOne, entityType, RelationshipMultiplicity.Many); var navigationProperty = entityType.AddNavigationProperty("N", associationType); var property = EdmProperty.CreatePrimitive("Fk1", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)); entityType.AddMember(property); var fkProperty1 = property; var property1 = EdmProperty.CreatePrimitive("Fk2", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)); entityType.AddMember(property1); var fkProperty2 = property1; var foreignKeyAnnotation = new ForeignKeyAttribute("Fk2,Fk1"); navigationProperty.GetMetadataProperties().SetClrAttributes(new[] { foreignKeyAnnotation }); (new ForeignKeyNavigationPropertyAttributeConvention()) .Apply(navigationProperty, new DbModel(model, null)); Assert.NotNull(associationType.Constraint); Assert.True(new[] { fkProperty2, fkProperty1 }.SequenceEqual(associationType.Constraint.ToProperties)); }