public void Can_only_override_lower_or_equal_source_ForeignKey() { var builder = CreateInternalSkipNavigationBuilder(); IConventionSkipNavigation metadata = builder.Metadata; var fk = (ForeignKey)metadata.DeclaringEntityType.Model.Builder.Entity(typeof(OrderProduct)) .HasRelationship(metadata.DeclaringEntityType, nameof(OrderProduct.Order)) .IsUnique(false) .Metadata; Assert.Null(metadata.ForeignKey); Assert.Null(metadata.GetForeignKeyConfigurationSource()); Assert.True(builder.CanSetForeignKey(fk, ConfigurationSource.DataAnnotation)); Assert.NotNull(builder.HasForeignKey(fk, ConfigurationSource.DataAnnotation)); Assert.Equal(fk, metadata.ForeignKey); Assert.Equal(ConfigurationSource.DataAnnotation, metadata.GetForeignKeyConfigurationSource()); Assert.True(builder.CanSetForeignKey(fk, ConfigurationSource.Convention)); Assert.False(builder.CanSetForeignKey(null, ConfigurationSource.Convention)); Assert.NotNull(builder.HasForeignKey(fk, ConfigurationSource.Convention)); Assert.Null(builder.HasForeignKey(null, ConfigurationSource.Convention)); Assert.Equal(fk, metadata.ForeignKey); Assert.Equal(ConfigurationSource.DataAnnotation, metadata.GetForeignKeyConfigurationSource()); Assert.True(builder.CanSetForeignKey(null, ConfigurationSource.DataAnnotation)); Assert.NotNull(builder.HasForeignKey(null, ConfigurationSource.DataAnnotation)); Assert.Null(metadata.ForeignKey); Assert.Null(metadata.GetForeignKeyConfigurationSource()); }
public void Can_only_override_lower_or_equal_source_ForeignKey() { var builder = CreateInternalSkipNavigationBuilder(); IConventionSkipNavigation metadata = builder.Metadata; // the skip navigation is pointing to the automatically-generated association entity type var originalFK = metadata.ForeignKey; Assert.NotNull(originalFK); Assert.Equal(ConfigurationSource.Convention, metadata.GetForeignKeyConfigurationSource()); var orderProductEntity = metadata.DeclaringEntityType.Model.Builder.Entity(typeof(OrderProduct)); var fk = (ForeignKey)orderProductEntity .HasRelationship(metadata.DeclaringEntityType, nameof(OrderProduct.Order)) .IsUnique(false) .Metadata; // skip navigation is unaffected by the FK created above Assert.NotSame(fk, metadata.ForeignKey); Assert.Same(originalFK, metadata.ForeignKey); Assert.Equal(ConfigurationSource.Convention, metadata.GetForeignKeyConfigurationSource()); // now explicitly assign the skip navigation's ForeignKey Assert.True(builder.CanSetForeignKey(fk, ConfigurationSource.DataAnnotation)); Assert.NotNull(builder.HasForeignKey(fk, ConfigurationSource.DataAnnotation)); Assert.Equal(fk, metadata.ForeignKey); Assert.Equal(ConfigurationSource.DataAnnotation, metadata.GetForeignKeyConfigurationSource()); Assert.True(builder.CanSetForeignKey(fk, ConfigurationSource.Convention)); Assert.False(builder.CanSetForeignKey(null, ConfigurationSource.Convention)); Assert.NotNull(builder.HasForeignKey(fk, ConfigurationSource.Convention)); Assert.Null(builder.HasForeignKey(null, ConfigurationSource.Convention)); Assert.Equal(fk, metadata.ForeignKey); Assert.Equal(ConfigurationSource.DataAnnotation, metadata.GetForeignKeyConfigurationSource()); Assert.True(builder.CanSetForeignKey(null, ConfigurationSource.DataAnnotation)); Assert.NotNull(builder.HasForeignKey(null, ConfigurationSource.DataAnnotation)); Assert.Null(metadata.ForeignKey); Assert.Null(metadata.GetForeignKeyConfigurationSource()); }