Beispiel #1
0
        public virtual void Passes_for_compatible_duplicate_column_names_within_hierarchy()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>(
                eb =>
            {
                eb.Ignore(e => e.Type);
                eb.Property(c => c.Breed).HasMaxLength(25);
                eb.Property(c => c.Breed).HasColumnName("BreedName");
                eb.Property(c => c.Breed).HasDefaultValue("None");
                eb.Property <bool>("Selected").HasDefaultValue(false);
            });
            modelBuilder.Entity <Dog>(
                eb =>
            {
                eb.Ignore(e => e.Type);
                eb.Property(c => c.Breed).HasMaxLength(25);
                eb.Property(c => c.Breed).HasColumnName("BreedName");
                eb.Property(c => c.Breed).HasDefaultValue("None");
                eb.Property <bool>("Selected").HasDefaultValue(false);
            });

            Validate(modelBuilder.Model);
        }
        private static IModel BuildModel(bool generateKeyValues, bool computeNonKeyValue)
        {
            IMutableModel model      = new Model(TestRelationalConventionSetBuilder.Build());
            var           entityType = model.AddEntityType(typeof(T1));

            var key = entityType.FindProperty("Id");

            key.ValueGenerated = generateKeyValues ? ValueGenerated.OnAdd : ValueGenerated.Never;
            key.SetColumnName("Col1");
            entityType.SetPrimaryKey(key);

            var nonKey1 = entityType.FindProperty("Name1");

            nonKey1.IsConcurrencyToken = computeNonKeyValue;

            nonKey1.SetColumnName("Col2");
            nonKey1.ValueGenerated = computeNonKeyValue ? ValueGenerated.OnAddOrUpdate : ValueGenerated.Never;

            var nonKey2 = entityType.FindProperty("Name2");

            nonKey2.IsConcurrencyToken = computeNonKeyValue;

            nonKey2.SetColumnName("Col3");
            nonKey2.ValueGenerated = computeNonKeyValue ? ValueGenerated.OnUpdate : ValueGenerated.Never;

            return(model.FinalizeModel());
        }
Beispiel #3
0
        public void Passes_for_non_key_identity()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Dog>().Property(c => c.Type).UseSqlServerIdentityColumn();

            Validate(modelBuilder.Model);
        }
Beispiel #4
0
        public void Detects_nullable_byte_identity_column()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Dog>().Property <byte?>("Bite").UseSqlServerIdentityColumn();

            VerifyWarning(SqlServerStrings.LogByteIdentityColumn.GenerateMessage("Bite", nameof(Dog)), modelBuilder.Model);
        }
        public void Detects_sequences()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.HasSequence("Fibonacci");

            VerifyWarning(SqliteStrings.SequenceConfigured("Fibonacci"), modelBuilder.Model);
        }
Beispiel #6
0
        public virtual void Detects_default_decimal_mapping()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>().Property <decimal>("Price");

            VerifyWarning(OracleStrings.LogDefaultDecimalTypeColumn.GenerateMessage("Price", nameof(Animal)), modelBuilder.Model);
        }
        public void Detects_schemas()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>().ToTable("Animals", "pet");

            VerifyWarning(SqliteStrings.SchemaConfigured("Animal", "pet"), modelBuilder.Model);
        }
        public void Throws_for_non_key_SequenceHiLo()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Dog>().Property(c => c.Type).ForSqlServerUseSequenceHiLo();

            VerifyError(SqlServerStrings.NonKeyValueGeneration(nameof(Dog.Type), nameof(Dog)), modelBuilder.Model);
        }
        public virtual void Detects_default_nullable_decimal_mapping()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>().Property <decimal?>("Price");

            VerifyWarning(SqlServerStrings.DefaultDecimalTypeColumn("Price", nameof(Animal)), modelBuilder.Model);
        }
        public void Detects_nullable_byte_identity_column()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Dog>().Property <byte?>("Bite").UseSqlServerIdentityColumn();

            VerifyError(SqlServerStrings.NonKeyValueGeneration("Bite", nameof(Dog)), modelBuilder.Model);
        }
        public void TableAttribute_sets_column_name_order_and_type_with_conventional_builder()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            var entityBuilder = modelBuilder.Entity <A>();

            Assert.Equal("MyTable", entityBuilder.Metadata.Relational().TableName);
            Assert.Equal("MySchema", entityBuilder.Metadata.Relational().Schema);
        }
Beispiel #12
0
        public void Throws_for_multiple_identity_properties()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Dog>().Property(c => c.Type).UseSqlServerIdentityColumn();
            modelBuilder.Entity <Dog>().Property <int?>("Tag").UseSqlServerIdentityColumn();

            VerifyError(SqlServerStrings.MultipleIdentityColumns("'Dog.Tag', 'Dog.Type'", nameof(Dog)), modelBuilder.Model);
        }
        public void Passes_for_non_key_SequenceHiLo_on_model()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.ForSqlServerUseSequenceHiLo();
            modelBuilder.Entity <Dog>().Property(c => c.Type).ValueGeneratedOnAdd();

            Validate(modelBuilder.Model);
        }
Beispiel #14
0
        public void ColumnAttribute_on_field_sets_column_name_and_type_with_conventional_builder()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            var entityBuilder = modelBuilder.Entity <F>();

            Assert.Equal("Post Name", entityBuilder.Property <string>(nameof(F.Name)).Metadata.Relational().ColumnName);
            Assert.Equal("DECIMAL", entityBuilder.Property <string>(nameof(F.Name)).Metadata.Relational().ColumnType);
        }
Beispiel #15
0
        public override void Detects_duplicate_column_names()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>().Property(b => b.Id).HasColumnName("Name");

            VerifyError(RelationalStrings.DuplicateColumnNameDataTypeMismatch(nameof(Animal), nameof(Animal.Id),
                                                                              nameof(Animal), nameof(Animal.Name), "Name", nameof(Animal), "NUMBER(10)", "NVARCHAR2(2000)"),
                        modelBuilder.Model);
        }
        public override void Detects_duplicate_column_names()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>().Property(b => b.Id).ForSqlServerHasColumnName("Name");

            VerifyError(RelationalStrings.DuplicateColumnNameDataTypeMismatch(nameof(Animal), nameof(Animal.Id),
                                                                              nameof(Animal), nameof(Animal.Name), "Name", nameof(Animal), "int", "nvarchar(max)"),
                        modelBuilder.Model);
        }
Beispiel #17
0
        public void Passes_for_non_key_identity_on_model()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.ForSqlServerUseIdentityColumns();
            modelBuilder.Entity <Dog>().Property(c => c.Id).ValueGeneratedNever();
            modelBuilder.Entity <Dog>().Property(c => c.Type).ValueGeneratedOnAdd();

            Validate(modelBuilder.Model);
        }
        public virtual void Detects_duplicate_column_names_within_hierarchy_with_different_nullability()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>();
            modelBuilder.Entity <Dog>().Property(d => d.Type).HasColumnName("Id");

            VerifyError(RelationalStrings.DuplicateColumnNameNullabilityMismatch(
                            nameof(Animal), nameof(Animal.Id), nameof(Dog), nameof(Dog.Type), nameof(Animal.Id), nameof(Animal)), modelBuilder.Model);
        }
        public virtual void Detects_duplicate_column_names_within_hierarchy_with_different_DefaultValueSql()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().Property(c => c.Breed).HasDefaultValueSql("1");
            modelBuilder.Entity <Dog>();

            VerifyError(RelationalStrings.DuplicateColumnNameDefaultSqlMismatch(
                            nameof(Cat), nameof(Cat.Breed), nameof(Dog), nameof(Dog.Breed), nameof(Cat.Breed), nameof(Animal), "1", ""), modelBuilder.Model);
        }
        public virtual void Detects_duplicate_columns_in_derived_types_with_different_types()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().Property(c => c.Type);
            modelBuilder.Entity <Dog>().Property(c => c.Type);

            VerifyError(RelationalStrings.DuplicateColumnNameDataTypeMismatch(
                            nameof(Cat), nameof(Cat.Type), nameof(Dog), nameof(Dog.Type), nameof(Cat.Type), nameof(Animal), "just_string(2000)", "default_int_mapping"), modelBuilder.Model);
        }
        public virtual void Detects_duplicate_column_names_within_hierarchy_with_different_unicode()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().Ignore(e => e.Type).Property(c => c.Breed).IsUnicode(false);
            modelBuilder.Entity <Dog>().Ignore(e => e.Type).Property(d => d.Breed).IsUnicode();

            VerifyError(RelationalStrings.DuplicateColumnNameDataTypeMismatch(
                            nameof(Cat), nameof(Cat.Breed), nameof(Dog), nameof(Dog.Breed), nameof(Cat.Breed), nameof(Animal), "varchar(max)", "nvarchar(max)"), modelBuilder.Model);
        }
        public virtual void Detects_duplicate_column_names_within_hierarchy_with_different_MaxLength()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().Property(c => c.Breed).HasMaxLength(30);
            modelBuilder.Entity <Dog>().Property(d => d.Breed).HasMaxLength(15);

            VerifyError(RelationalStrings.DuplicateColumnNameDataTypeMismatch(
                            nameof(Cat), nameof(Cat.Breed), nameof(Dog), nameof(Dog.Breed), nameof(Cat.Breed), nameof(Animal), "just_string(30)", "just_string(15)"), modelBuilder.Model);
        }
        public override void Detects_duplicate_columns_in_derived_types_with_different_types()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().Property(c => c.Type);
            modelBuilder.Entity <Dog>().Property(c => c.Type);

            VerifyError(RelationalStrings.DuplicateColumnNameDataTypeMismatch(
                            typeof(Cat).Name, "Type", typeof(Dog).Name, "Type", "Type", nameof(Animal), "TEXT", "INTEGER"), modelBuilder.Model);
        }
        public virtual void Passes_for_incompatible_indexes_within_hierarchy_when_one_name_configured_explicitly()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            var index1 = modelBuilder.Entity <Cat>().HasIndex(c => c.Name).IsUnique().HasName("IX_Animal_Name").Metadata;
            var index2 = modelBuilder.Entity <Dog>().HasIndex(d => d.Name).IsUnique(false).Metadata;

            Validate(modelBuilder.Model);

            Assert.Equal("IX_Animal_Name", index1.Relational().Name);
            Assert.Equal("IX_Animal_Name0", index2.Relational().Name);
        }
        public virtual void Passes_for_compatible_duplicate_index_names_within_hierarchy()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            var index1 = modelBuilder.Entity <Cat>().HasIndex(c => c.Breed).Metadata;
            var index2 = modelBuilder.Entity <Dog>().HasIndex(c => c.Breed).Metadata;

            Validate(modelBuilder.Model);

            Assert.NotSame(index1, index2);
            Assert.Equal(index1.Relational().Name, index2.Relational().Name);
        }
        public virtual void Does_not_detect_missing_discriminator_value_for_abstract_class()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Abstract>();
            modelBuilder.Entity <A>().HasDiscriminator <byte>("ClassType")
            .HasValue <A>(0)
            .HasValue <C>(1)
            .HasValue <D>(2)
            .HasValue <Generic <string> >(3);

            Validate(modelBuilder.Model);
        }
        public virtual void Detects_duplicate_discriminator_values()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <A>().HasDiscriminator <byte>("ClassType")
            .HasValue <A>(1)
            .HasValue <C>(1)
            .HasValue <D>(2);

            var model = modelBuilder.Model;

            VerifyError(RelationalStrings.DuplicateDiscriminatorValue(typeof(C).Name, 1, typeof(A).Name), model);
        }
        public virtual void Detects_missing_non_string_discriminator_values()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <C>();
            modelBuilder.Entity <A>().HasDiscriminator <byte>("ClassType")
            .HasValue <A>(0)
            .HasValue <D>(1);

            var model = modelBuilder.Model;

            VerifyError(RelationalStrings.NoDiscriminatorValue(typeof(C).Name), model);
        }
        public virtual void Detects_duplicate_foreignKey_names_within_hierarchy_with_different_uniqueness()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().HasOne <Person>().WithMany().HasForeignKey(c => c.Name).HasPrincipalKey(p => p.Name);
            modelBuilder.Entity <Dog>().HasOne <Person>().WithOne().HasForeignKey <Dog>(d => d.Name).HasPrincipalKey <Person>(p => p.Name);

            VerifyError(RelationalStrings.DuplicateForeignKeyUniquenessMismatch(
                            "{'" + nameof(Dog.Name) + "'}", nameof(Dog),
                            "{'" + nameof(Cat.Name) + "'}", nameof(Cat),
                            nameof(Animal), "FK_Animal_Person_Name"),
                        modelBuilder.Model);
        }
        public virtual void Detects_duplicate_index_names_within_hierarchy_with_different_uniqueness()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().HasIndex(c => c.Name).IsUnique();
            modelBuilder.Entity <Dog>().HasIndex(d => d.Name).IsUnique(false);

            VerifyError(RelationalStrings.DuplicateIndexUniquenessMismatch(
                            "{'" + nameof(Dog.Name) + "'}", nameof(Dog),
                            "{'" + nameof(Cat.Name) + "'}", nameof(Cat),
                            nameof(Animal), "IX_Animal_Name"),
                        modelBuilder.Model);
        }