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), "nvarchar(max)", "int"), 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);
        }
Esempio n. 3
0
        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_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_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_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_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), "int", "nvarchar(max)"),
                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 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 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 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 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_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);
        }
        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 Passes_for_incompatible_foreignKeys_within_hierarchy_when_one_name_configured_explicitly()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            var fk1 = modelBuilder.Entity <Cat>().HasOne <Person>().WithMany().HasForeignKey(c => c.Name).HasPrincipalKey(p => p.Name)
                      .OnDelete(DeleteBehavior.Cascade).HasConstraintName("FK_Animal_Person_Name").Metadata;
            var fk2 = modelBuilder.Entity <Dog>().HasOne <Person>().WithMany().HasForeignKey(d => d.Name).HasPrincipalKey(p => p.Name)
                      .OnDelete(DeleteBehavior.SetNull).Metadata;

            Validate(modelBuilder.Model);

            Assert.Equal("FK_Animal_Person_Name", fk1.Relational().Name);
            Assert.Equal("FK_Animal_Person_Name0", fk2.Relational().Name);
        }
        public virtual void Detects_duplicate_index_names_within_hierarchy_with_different_column_order()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().HasIndex(c => new { c.Name, c.Breed }).HasName("IX");
            modelBuilder.Entity <Dog>().HasIndex(d => new { d.Breed, d.Name }).HasName("IX");

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

            modelBuilder.Entity <Animal>().Property <int>("Shadow");
            modelBuilder.Entity <Cat>().HasIndex(nameof(Cat.Name), "Shadow").HasName("IX");
            modelBuilder.Entity <Dog>().HasIndex(d => d.Name).HasName("IX");

            VerifyError(RelationalStrings.DuplicateIndexColumnMismatch(
                            "{'" + nameof(Dog.Name) + "'}", nameof(Dog),
                            "{'" + nameof(Cat.Name) + "', 'Shadow'}", nameof(Cat),
                            nameof(Animal), "IX",
                            "{'" + nameof(Dog.Name) + "'}",
                            "{'" + nameof(Cat.Name) + "', 'Shadow'}"),
                        modelBuilder.Model);
        }
Esempio n. 18
0
        public void Detects_function_with_invalid_return_type_throws()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            var methodInfo
                = typeof(DbFunctionMetadataTests.TestMethods)
                  .GetRuntimeMethod(nameof(DbFunctionMetadataTests.TestMethods.MethodD), new Type[] { });

            modelBuilder.HasDbFunction(methodInfo);

            VerifyError(
                RelationalStrings.DbFunctionInvalidReturnType(
                    methodInfo.DisplayName(),
                    typeof(DbFunctionMetadataTests.TestMethods).ShortDisplayName()),
                modelBuilder.Model);
        }
        public virtual void Detects_duplicate_foreignKey_names_within_hierarchy_with_different_column_order()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().HasOne <Person>().WithMany().HasForeignKey(c => new { c.Name, c.Breed }).HasPrincipalKey(p => new { p.Name, p.FavoriteBreed }).HasConstraintName("FK");
            modelBuilder.Entity <Dog>().HasOne <Person>().WithMany().HasForeignKey(d => new { d.Breed, d.Name }).HasPrincipalKey(p => new { p.FavoriteBreed, p.Name }).HasConstraintName("FK");

            VerifyError(RelationalStrings.DuplicateForeignKeyColumnMismatch(
                            "{'" + nameof(Dog.Breed) + "', '" + nameof(Dog.Name) + "'}", nameof(Dog),
                            "{'" + nameof(Cat.Name) + "', '" + nameof(Cat.Breed) + "'}", nameof(Cat),
                            nameof(Animal), "FK",
                            "{'" + nameof(Dog.Breed) + "', '" + nameof(Dog.Name) + "'}",
                            "{'" + nameof(Cat.Name) + "', '" + nameof(Cat.Breed) + "'}"),
                        modelBuilder.Model);
        }
Esempio n. 20
0
        public virtual void Detects_function_with_invalid_parameter_type_but_translate_callback_does_not_throw()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            var methodInfo
                = typeof(DbFunctionMetadataTests.TestMethods)
                  .GetRuntimeMethod(
                      nameof(DbFunctionMetadataTests.TestMethods.MethodF),
                      new[] { typeof(DbFunctionMetadataTests.MyBaseContext) });

            var dbFuncBuilder = modelBuilder.HasDbFunction(methodInfo);

            dbFuncBuilder.HasTranslation(parameters => null);

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

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>().HasOne <Person>().WithMany().HasForeignKey("FriendId").HasConstraintName("FK");
            modelBuilder.Entity <Dog>().HasOne <Animal>().WithMany().HasForeignKey("FriendId").HasConstraintName("FK");

            VerifyError(RelationalStrings.DuplicateForeignKeyPrincipalTableMismatch(
                            "{'FriendId'}", nameof(Dog),
                            "{'FriendId'}", nameof(Cat),
                            nameof(Animal), "FK",
                            nameof(Animal),
                            nameof(Person)),
                        modelBuilder.Model);
        }
        public virtual void Detects_duplicate_foreignKey_names_within_hierarchy_with_different_column_count()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>().Property <int>("FriendId");
            modelBuilder.Entity <Animal>().Property <string>("Shadow");
            modelBuilder.Entity <Cat>().HasOne <Person>().WithMany().HasForeignKey("FriendId", "Shadow").HasPrincipalKey(p => new { p.Id, p.Name }).HasConstraintName("FK");
            modelBuilder.Entity <Dog>().HasOne <Person>().WithMany().HasForeignKey("FriendId").HasConstraintName("FK");

            VerifyError(RelationalStrings.DuplicateForeignKeyColumnMismatch(
                            "{'FriendId'}", nameof(Dog),
                            "{'FriendId', 'Shadow'}", nameof(Cat),
                            nameof(Animal), "FK",
                            "{'FriendId'}",
                            "{'FriendId', 'Shadow'}"),
                        modelBuilder.Model);
        }
Esempio n. 23
0
        public virtual void Detects_function_with_invalid_parameter_type_but_no_translate_callback_throws()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            var methodInfo
                = typeof(DbFunctionMetadataTests.TestMethods)
                  .GetRuntimeMethod(
                      nameof(DbFunctionMetadataTests.TestMethods.MethodF),
                      new[] { typeof(DbFunctionMetadataTests.MyBaseContext) });

            modelBuilder.HasDbFunction(methodInfo);

            VerifyError(
                RelationalStrings.DbFunctionInvalidParameterType(
                    "context", methodInfo.DisplayName(), typeof(DbFunctionMetadataTests.MyBaseContext).ShortDisplayName()),
                modelBuilder.Model);
        }
        private void Compare_returns_0_only_for_entries_that_have_same_key_values_generic <T>(T value1, T value2)
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());
            var model        = modelBuilder.Model;
            var entityType   = model.AddEntityType(typeof(object));

            var keyProperty = entityType.AddProperty("Id", typeof(T));

            keyProperty.IsNullable = false;
            entityType.SetPrimaryKey(keyProperty);

            var optionsBuilder = new DbContextOptionsBuilder()
                                 .UseInternalServiceProvider(InMemoryFixture.DefaultServiceProvider)
                                 .UseModel(RelationalTestHelpers.Instance.Finalize(modelBuilder))
                                 .UseInMemoryDatabase(Guid.NewGuid().ToString());

            var stateManager = new DbContext(optionsBuilder.Options).GetService <IStateManager>();

            var entry1 = stateManager.GetOrCreateEntry(new object());

            entry1[(IProperty)keyProperty] = value1;
            entry1.SetEntityState(EntityState.Modified);
            var modificationCommand1 = new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null);

            modificationCommand1.AddEntry(entry1, true);

            var entry2 = stateManager.GetOrCreateEntry(new object());

            entry2[(IProperty)keyProperty] = value2;
            entry2.SetEntityState(EntityState.Modified);
            var modificationCommand2 = new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null);

            modificationCommand2.AddEntry(entry2, true);

            var modificationCommand3 = new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null);

            modificationCommand3.AddEntry(entry1, true);

            var mCC = new ModificationCommandComparer();

            Assert.True(0 > mCC.Compare(modificationCommand1, modificationCommand2));
            Assert.True(0 < mCC.Compare(modificationCommand2, modificationCommand1));
            Assert.True(0 == mCC.Compare(modificationCommand1, modificationCommand3));
        }
Esempio n. 25
0
        public virtual void Detects_duplicate_column_names_within_hierarchy_with_different_value_generation_strategy()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            modelBuilder.Entity <Cat>(cb =>
            {
                cb.Property(c => c.Identity).UseSqlServerIdentityColumn();
                cb.Property(c => c.Identity).HasColumnName(nameof(Cat.Identity));
            });
            modelBuilder.Entity <Dog>(db =>
            {
                db.Property(d => d.Identity).ValueGeneratedNever();
                db.Property(c => c.Identity).HasColumnName(nameof(Dog.Identity));
            });

            VerifyError(
                SqlServerStrings.DuplicateColumnNameValueGenerationStrategyMismatch(
                    nameof(Cat), nameof(Cat.Identity), nameof(Dog), nameof(Dog.Identity), nameof(Cat.Identity), nameof(Animal)), modelBuilder.Model);
        }
        public virtual void Passes_for_compatible_duplicate_foreignKey_names_within_hierarchy()
        {
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity <Animal>();
            var fk1 = modelBuilder.Entity <Cat>()
                      .HasOne <Person>()
                      .WithMany()
                      .HasForeignKey(c => new { c.Name, c.Breed })
                      .HasPrincipalKey(p => new { p.Name, p.FavoriteBreed })
                      .Metadata;
            var fk2 = modelBuilder.Entity <Dog>()
                      .HasOne <Customer>()
                      .WithMany()
                      .HasForeignKey(c => new { c.Name, c.Breed })
                      .HasPrincipalKey(p => new { p.Name, p.FavoriteBreed })
                      .Metadata;

            Validate(modelBuilder.Model);

            Assert.NotSame(fk1, fk2);
            Assert.Equal(fk1.Relational().Name, fk2.Relational().Name);
        }
        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);
        }
Esempio n. 28
0
        public void Compare_returns_0_only_for_commands_that_are_equal()
        {
            IMutableModel model      = new Model(TestRelationalConventionSetBuilder.Build());
            var           entityType = model.AddEntityType(typeof(object));
            var           key        = entityType.AddProperty("Id", typeof(int));

            entityType.SetPrimaryKey(key);

            var optionsBuilder = new DbContextOptionsBuilder()
                                 .UseModel(model.FinalizeModel())
                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                 .UseInternalServiceProvider(InMemoryFixture.DefaultServiceProvider);

            var stateManager = new DbContext(optionsBuilder.Options).GetService <IStateManager>();

            var entry1 = stateManager.GetOrCreateEntry(new object());

            entry1[key] = 1;
            entry1.SetEntityState(EntityState.Added);
            var modificationCommandAdded = new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null);

            modificationCommandAdded.AddEntry(entry1);

            var entry2 = stateManager.GetOrCreateEntry(new object());

            entry2[key] = 2;
            entry2.SetEntityState(EntityState.Modified);
            var modificationCommandModified = new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null);

            modificationCommandModified.AddEntry(entry2);

            var entry3 = stateManager.GetOrCreateEntry(new object());

            entry3[key] = 3;
            entry3.SetEntityState(EntityState.Deleted);
            var modificationCommandDeleted = new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null);

            modificationCommandDeleted.AddEntry(entry3);

            var mCC = new ModificationCommandComparer();

            Assert.True(0 == mCC.Compare(modificationCommandAdded, modificationCommandAdded));
            Assert.True(0 == mCC.Compare(null, null));
            Assert.True(
                0 == mCC.Compare(
                    new ModificationCommand("A", "dbo", new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("A", "dbo", new ParameterNameGenerator().GenerateNext, false, null)));

            Assert.True(0 > mCC.Compare(null, new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null)));
            Assert.True(0 < mCC.Compare(new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null), null));

            Assert.True(
                0 > mCC.Compare(
                    new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("A", "dbo", new ParameterNameGenerator().GenerateNext, false, null)));
            Assert.True(
                0 < mCC.Compare(
                    new ModificationCommand("A", "dbo", new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null)));

            Assert.True(
                0 > mCC.Compare(
                    new ModificationCommand("A", "dbo", new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("A", "foo", new ParameterNameGenerator().GenerateNext, false, null)));
            Assert.True(
                0 < mCC.Compare(
                    new ModificationCommand("A", "foo", new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("A", "dbo", new ParameterNameGenerator().GenerateNext, false, null)));

            Assert.True(
                0 > mCC.Compare(
                    new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("B", null, new ParameterNameGenerator().GenerateNext, false, null)));
            Assert.True(
                0 < mCC.Compare(
                    new ModificationCommand("B", null, new ParameterNameGenerator().GenerateNext, false, null),
                    new ModificationCommand("A", null, new ParameterNameGenerator().GenerateNext, false, null)));

            Assert.True(0 > mCC.Compare(modificationCommandModified, modificationCommandAdded));
            Assert.True(0 < mCC.Compare(modificationCommandAdded, modificationCommandModified));

            Assert.True(0 > mCC.Compare(modificationCommandDeleted, modificationCommandAdded));
            Assert.True(0 < mCC.Compare(modificationCommandAdded, modificationCommandDeleted));

            Assert.True(0 > mCC.Compare(modificationCommandDeleted, modificationCommandModified));
            Assert.True(0 < mCC.Compare(modificationCommandModified, modificationCommandDeleted));
        }
 protected virtual ConventionSet CreateConventionSet() => TestRelationalConventionSetBuilder.Build();
        public void WriteCode_works()
        {
            var generator    = CreateGenerator();
            var modelBuilder = new ModelBuilder(TestRelationalConventionSetBuilder.Build());

            modelBuilder.Entity("TestEntity").Property <int>("Id").HasAnnotation(ScaffoldingAnnotationNames.ColumnOrdinal, 0);

            var result = generator.WriteCode(
                modelBuilder.Model,
                "TestNamespace",
                "TestContext",
                "Data Source=Test",
                dataAnnotations: true);

            Assert.Equal("TestContext.cs", result.ContextFile.Path);
            Assert.Equal(
                @"using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

namespace TestNamespace
{
    public partial class TestContext : DbContext
    {
        public virtual DbSet<TestEntity>  { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
                optionsBuilder.UseTestProvider(""Data Source=Test"");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {}
    }
}
",
                result.ContextFile.Code,
                ignoreLineEndingDifferences: true);

            Assert.Equal(1, result.EntityTypeFiles.Count);
            Assert.Equal("TestEntity.cs", result.EntityTypeFiles[0].Path);
            Assert.Equal(
                @"using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace TestNamespace
{
    [Table(""TestEntity"")]
    public partial class TestEntity
    {
        public int Id { get; set; }
    }
}
",
                result.EntityTypeFiles[0].Code,
                ignoreLineEndingDifferences: true);
        }