Ejemplo n.º 1
0
        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());
        }