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