public void Apply_MultiForeignKeysOnForeignKeyProperty_Works() { // Arrange ODataConventionModelBuilder builder = ODataConventionModelBuilderFactory.Create(); builder.EntityType <PrincipalEntity>().HasKey(p => new { p.PrincipalStringId, p.PrincipalIntId }); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(MultiDependentEntity2)); PropertyInfo expectPropertyInfo1 = typeof(MultiDependentEntity2).GetProperty("PrincipalId1"); PrimitivePropertyConfiguration propertyConfig1 = dependentEntity.AddProperty(expectPropertyInfo1); PropertyInfo expectPropertyInfo2 = typeof(MultiDependentEntity2).GetProperty("PrincipalId2"); PrimitivePropertyConfiguration propertyConfig2 = dependentEntity.AddProperty(expectPropertyInfo2); PropertyInfo propertyInfo = typeof(MultiDependentEntity2).GetProperty("Principal"); NavigationPropertyConfiguration navigation = dependentEntity.AddNavigationProperty(propertyInfo, EdmMultiplicity.One); navigation.AddedExplicitly = false; // Act ForeignKeyAttributeConvention convention = new ForeignKeyAttributeConvention(); convention.Apply(propertyConfig1, dependentEntity, builder); convention.Apply(propertyConfig2, dependentEntity, builder); // Assert Assert.Equal(2, navigation.DependentProperties.Count()); Assert.Same(expectPropertyInfo1, navigation.DependentProperties.First()); Assert.Same(expectPropertyInfo2, navigation.DependentProperties.Last()); Assert.Equal(2, navigation.PrincipalProperties.Count()); Assert.Equal("PrincipalIntId", navigation.PrincipalProperties.First().Name); Assert.Equal("PrincipalStringId", navigation.PrincipalProperties.Last().Name); }
private void ApplyForeignKeyConventions() { ForeignKeyAttributeConvention foreignKeyAttributeConvention = new ForeignKeyAttributeConvention(); ForeignKeyDiscoveryConvention foreignKeyDiscoveryConvention = new ForeignKeyDiscoveryConvention(); ActionOnDeleteAttributeConvention actionOnDeleteConvention = new ActionOnDeleteAttributeConvention(); foreach (EntityTypeConfiguration edmType in StructuralTypes.OfType <EntityTypeConfiguration>()) { foreach (PropertyConfiguration property in edmType.Properties) { // ForeignKeyDiscoveryConvention has to run after ForeignKeyAttributeConvention foreignKeyAttributeConvention.Apply(property, edmType, this); foreignKeyDiscoveryConvention.Apply(property, edmType, this); actionOnDeleteConvention.Apply(property, edmType, this); } } }
public void Apply_MultiForeignKeysOnForeignKeyProperty_Works() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntityType<PrincipalEntity>().HasKey(p => new { p.PrincipalStringId, p.PrincipalIntId }); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(MultiDependentEntity2)); PropertyInfo expectPropertyInfo1 = typeof(MultiDependentEntity2).GetProperty("PrincipalId1"); PrimitivePropertyConfiguration propertyConfig1 = dependentEntity.AddProperty(expectPropertyInfo1); PropertyInfo expectPropertyInfo2 = typeof(MultiDependentEntity2).GetProperty("PrincipalId2"); PrimitivePropertyConfiguration propertyConfig2 = dependentEntity.AddProperty(expectPropertyInfo2); PropertyInfo propertyInfo = typeof(MultiDependentEntity2).GetProperty("Principal"); NavigationPropertyConfiguration navigation = dependentEntity.AddNavigationProperty(propertyInfo, EdmMultiplicity.One); navigation.AddedExplicitly = false; // Act ForeignKeyAttributeConvention convention = new ForeignKeyAttributeConvention(); convention.Apply(propertyConfig1, dependentEntity, builder); convention.Apply(propertyConfig2, dependentEntity, builder); // Assert Assert.Equal(2, navigation.DependentProperties.Count()); Assert.Same(expectPropertyInfo1, navigation.DependentProperties.First()); Assert.Same(expectPropertyInfo2, navigation.DependentProperties.Last()); Assert.Equal(2, navigation.PrincipalProperties.Count()); Assert.Equal("PrincipalIntId", navigation.PrincipalProperties.First().Name); Assert.Equal("PrincipalStringId", navigation.PrincipalProperties.Last().Name); }