public virtual void Passes_for_non_hierarchical_model()
        {
            var model   = new Entity.Metadata.Internal.Model();
            var entityA = model.AddEntityType(typeof(A));

            SetPrimaryKey(entityA);

            CreateModelValidator().Validate(model);
        }
        public virtual void Detects_missing_discriminator_property()
        {
            var model   = new Entity.Metadata.Internal.Model();
            var entityA = model.AddEntityType(typeof(A));

            SetPrimaryKey(entityA);
            var entityC = model.AddEntityType(typeof(C));

            entityC.BaseType = entityA;

            VerifyError(RelationalStrings.NoDiscriminatorProperty(entityC.DisplayName()), model);
        }
        public virtual void Does_not_detect_non_instantiable_types()
        {
            var model          = new Entity.Metadata.Internal.Model();
            var entityAbstract = model.AddEntityType(typeof(Abstract));

            SetPrimaryKey(entityAbstract);
            var entityGeneric = model.AddEntityType(typeof(Generic <>));

            entityGeneric.BaseType = entityAbstract;

            CreateModelValidator().Validate(model);
        }
예제 #4
0
        private EntityType GetDuckType()
        {
            var entityType = new Entity.Metadata.Internal.Model().AddEntityType(typeof(Duck));
            var id         = entityType.AddProperty(typeof(Duck).GetTypeInfo().GetDeclaredProperty(nameof(Duck.Id)));

            entityType.AddProperty(typeof(Duck).GetTypeInfo().GetDeclaredProperty(nameof(Duck.Name)));
            entityType.AddProperty(typeof(Duck).GetTypeInfo().GetDeclaredProperty(nameof(Duck.Quacks)));
            entityType.AddProperty(typeof(Duck).GetTypeInfo().GetDeclaredProperty(nameof(Duck.Computed)));
            entityType.AddProperty(typeof(Duck).GetTypeInfo().GetDeclaredProperty(nameof(Duck.ConcurrencyToken)));
            entityType.SetPrimaryKey(id);
            return(entityType);
        }
        public virtual void Detects_duplicate_table_names()
        {
            var model   = new Entity.Metadata.Internal.Model();
            var entityA = model.AddEntityType(typeof(A));

            SetPrimaryKey(entityA);
            var entityB = model.AddEntityType(typeof(B));

            SetPrimaryKey(entityB);
            entityA.Relational().TableName = "Table";
            entityB.Relational().TableName = "Table";

            VerifyError(RelationalStrings.DuplicateTableName("Table", null, entityB.DisplayName()), model);
        }
        public virtual void Does_not_detect_duplicate_table_names_in_different_schema()
        {
            var model   = new Entity.Metadata.Internal.Model();
            var entityA = model.AddEntityType(typeof(A));

            SetPrimaryKey(entityA);
            var entityB = model.AddEntityType(typeof(B));

            SetPrimaryKey(entityB);
            entityA.Relational().TableName = "Table";
            entityA.Relational().Schema    = "SchemaA";
            entityB.Relational().TableName = "Table";
            entityB.Relational().Schema    = "SchemaB";

            CreateModelValidator().Validate(model);
        }
        public virtual void Detects_missing_discriminator_value_on_leaf()
        {
            var model          = new Entity.Metadata.Internal.Model();
            var entityAbstract = model.AddEntityType(typeof(Abstract));

            SetPrimaryKey(entityAbstract);
            var entityGeneric = model.AddEntityType(typeof(Generic <string>));

            entityGeneric.BaseType = entityAbstract;

            var discriminatorProperty = entityAbstract.AddProperty("D", typeof(int));

            entityAbstract.Relational().DiscriminatorProperty = discriminatorProperty;
            entityAbstract.Relational().DiscriminatorValue    = 0;

            VerifyError(RelationalStrings.NoDiscriminatorValue(entityGeneric.DisplayName()), model);
        }
        public virtual void Does_not_detect_duplicate_table_names_for_inherited_entities()
        {
            var model   = new Entity.Metadata.Internal.Model();
            var entityA = model.AddEntityType(typeof(A));

            SetPrimaryKey(entityA);
            var entityC = model.AddEntityType(typeof(C));

            entityC.BaseType = entityA;

            var discriminatorProperty = entityA.AddProperty("D", typeof(int));

            entityA.Relational().DiscriminatorProperty = discriminatorProperty;
            entityA.Relational().DiscriminatorValue    = 0;
            entityC.Relational().DiscriminatorValue    = 1;

            CreateModelValidator().Validate(model);
        }
예제 #9
0
        private static IModel BuildModel(bool generateKeyValues, bool computeNonKeyValue)
        {
            var model = new Entity.Metadata.Internal.Model();

            var entityType = model.AddEntityType(typeof(T1));

            var key = entityType.AddProperty("Id", typeof(int));

            key.IsShadowProperty = false;
            key.ValueGenerated   = generateKeyValues ? ValueGenerated.OnAdd : ValueGenerated.Never;
            key.Relational().ColumnName = "Col1";
            entityType.GetOrSetPrimaryKey(key);

            var nonKey = entityType.AddProperty("Name", typeof(string));

            nonKey.IsShadowProperty = false;
            nonKey.Relational().ColumnName = "Col2";
            nonKey.ValueGenerated = computeNonKeyValue ? ValueGenerated.OnAddOrUpdate : ValueGenerated.Never;

            return(model);
        }
        private static IModel BuildModel(bool generateKeyValues, bool computeNonKeyValue)
        {
            var model = new Entity.Metadata.Internal.Model();
            var entityType = model.AddEntityType(typeof(T1));

            var key = entityType.AddProperty("Id", typeof(int));
            key.IsShadowProperty = false;
            key.ValueGenerated = generateKeyValues ? ValueGenerated.OnAdd : ValueGenerated.Never;
            key.Relational().ColumnName = "Col1";
            entityType.GetOrSetPrimaryKey(key);

            var nonKey = entityType.AddProperty("Name", typeof(string));
            nonKey.IsShadowProperty = false;
            nonKey.IsConcurrencyToken = computeNonKeyValue;

            nonKey.Relational().ColumnName = "Col2";
            nonKey.ValueGenerated = computeNonKeyValue ? ValueGenerated.OnAddOrUpdate : ValueGenerated.Never;

            return model;
        }
        public void Compare_returns_0_only_for_commands_that_are_equal()
        {
            var model = new Entity.Metadata.Internal.Model();
            var entityType = model.AddEntityType(typeof(object));

            var optionsBuilder = new DbContextOptionsBuilder()
                .UseModel(model);
            optionsBuilder.UseInMemoryDatabase();

            var contextServices = new DbContext(optionsBuilder.Options).GetInfrastructure();
            var stateManager = contextServices.GetRequiredService<IStateManager>();

            var key = entityType.AddProperty("Id", typeof(int));
            entityType.GetOrSetPrimaryKey(key);

            var entry1 = stateManager.GetOrCreateEntry(new object());
            entry1[key] = 1;
            entry1.SetEntityState(EntityState.Added);
            var modificationCommandAdded = new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider());
            modificationCommandAdded.AddEntry(entry1);

            var entry2 = stateManager.GetOrCreateEntry(new object());
            entry2[key] = 2;
            entry2.SetEntityState(EntityState.Modified);
            var modificationCommandModified = new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider());
            modificationCommandModified.AddEntry(entry2);

            var entry3 = stateManager.GetOrCreateEntry(new object());
            entry3[key] = 3;
            entry3.SetEntityState(EntityState.Deleted);
            var modificationCommandDeleted = new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider());
            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(), p => p.TestProvider()),
                new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider())));

            Assert.True(0 > mCC.Compare(null, new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider()), null));

            Assert.True(0 > mCC.Compare(
                new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider()),
                new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(
                new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider()),
                new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider())));

            Assert.True(0 > mCC.Compare(
                new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider()),
                new ModificationCommand("A", "foo", new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(
                new ModificationCommand("A", "foo", new ParameterNameGenerator(), p => p.TestProvider()),
                new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider())));

            Assert.True(0 > mCC.Compare(
                new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider()),
                new ModificationCommand("B", null, new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(
                new ModificationCommand("B", null, new ParameterNameGenerator(), p => p.TestProvider()),
                new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider())));

            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));
        }
예제 #12
0
        public void Compare_returns_0_only_for_commands_that_are_equal()
        {
            var model      = new Entity.Metadata.Internal.Model();
            var entityType = model.AddEntityType(typeof(object));

            var optionsBuilder = new DbContextOptionsBuilder()
                                 .UseModel(model);

            optionsBuilder.UseInMemoryDatabase();

            var contextServices = new DbContext(optionsBuilder.Options).GetInfrastructure();
            var stateManager    = contextServices.GetRequiredService <IStateManager>();

            var key = entityType.AddProperty("Id", typeof(int));

            entityType.GetOrSetPrimaryKey(key);

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

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

            modificationCommandAdded.AddEntry(entry1);

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

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

            modificationCommandModified.AddEntry(entry2);

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

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

            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(), p => p.TestProvider()),
                            new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider())));

            Assert.True(0 > mCC.Compare(null, new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider()), null));

            Assert.True(0 > mCC.Compare(
                            new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider()),
                            new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(
                            new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider()),
                            new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider())));

            Assert.True(0 > mCC.Compare(
                            new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider()),
                            new ModificationCommand("A", "foo", new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(
                            new ModificationCommand("A", "foo", new ParameterNameGenerator(), p => p.TestProvider()),
                            new ModificationCommand("A", "dbo", new ParameterNameGenerator(), p => p.TestProvider())));

            Assert.True(0 > mCC.Compare(
                            new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider()),
                            new ModificationCommand("B", null, new ParameterNameGenerator(), p => p.TestProvider())));
            Assert.True(0 < mCC.Compare(
                            new ModificationCommand("B", null, new ParameterNameGenerator(), p => p.TestProvider()),
                            new ModificationCommand("A", null, new ParameterNameGenerator(), p => p.TestProvider())));

            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));
        }