private void ResetState() { _connection = null; _tableSelectionSet = null; _databaseModel = new DatabaseModel(); _tables = new Dictionary<string, TableModel>(); _tableColumns = new Dictionary<string, ColumnModel>(StringComparer.OrdinalIgnoreCase); }
public void Creates_entity_types() { var info = new DatabaseModel { Tables = { new TableModel { Name = "tableWithSchema", SchemaName = "public", Columns = { IdColumn } }, new TableModel { Name = "noSchema", Columns = { IdColumn } }, new TableModel { Name = "notScaffoldable", } } }; var model = _factory.Create(info); Assert.Collection(model.GetEntityTypes().OrderBy(t => t.Name).Cast<EntityType>(), table => { Assert.Equal("noSchema", table.Relational().TableName); Assert.Null(table.Relational().Schema); }, pgtable => { Assert.Equal("tableWithSchema", pgtable.Relational().TableName); Assert.Equal("public", pgtable.Relational().Schema); } ); Assert.NotEmpty(model.Scaffolding().EntityTypeErrors.Values); }
public void Loads_column_types() { var info = new DatabaseModel { Tables = { new TableModel { Name = "Jobs", Columns = { IdColumn, new ColumnModel { Name = "occupation", DataType = "string", DefaultValue = "\"dev\"" }, new ColumnModel { Name = "salary", DataType = "long", IsNullable = true, MaxLength = 100 }, new ColumnModel { Name = "modified", DataType = "string", IsNullable = false, ValueGenerated = ValueGenerated.OnAddOrUpdate }, new ColumnModel { Name = "created", DataType = "string", ValueGenerated = ValueGenerated.OnAdd } } } } }; var entityType = (EntityType)_factory.Create(info).FindEntityType("Jobs"); Assert.Collection(entityType.GetProperties(), pk => { Assert.Equal("Id", pk.Name); Assert.Equal(typeof(long), pk.ClrType); }, col1 => { Assert.Equal("created", col1.Relational().ColumnName); Assert.Equal(ValueGenerated.OnAdd, col1.ValueGenerated); }, col2 => { Assert.Equal("modified", col2.Relational().ColumnName); Assert.Equal(ValueGenerated.OnAddOrUpdate, col2.ValueGenerated); }, col3 => { Assert.Equal("occupation", col3.Relational().ColumnName); Assert.Equal(typeof(string), col3.ClrType); Assert.False(col3.IsColumnNullable()); Assert.Null(col3.GetMaxLength()); Assert.Equal("\"dev\"", col3.Relational().GeneratedValueSql); }, col4 => { Assert.Equal("salary", col4.Name); Assert.Equal(typeof(long?), col4.ClrType); Assert.True(col4.IsColumnNullable()); Assert.Equal(100, col4.GetMaxLength()); Assert.Null(col4.Relational().DefaultValue); }); }
public IModel Create(DatabaseModel databaseModel) => base.CreateFromDatabaseModel(databaseModel);
public void Unique_names() { var info = new DatabaseModel { Tables = { new TableModel { Name = "E F", Columns = { new ColumnModel { Name = "San itized", DataType = "long" }, new ColumnModel { Name = "San_itized", DataType = "long" } } }, new TableModel { Name = "E_F" } } }; info.Tables[0].Columns.Add(new ColumnModel { Name = "Id", DataType = "long", PrimaryKeyOrdinal = 0, Table = info.Tables[0] }); info.Tables[1].Columns.Add(new ColumnModel { Name = "Id", DataType = "long", PrimaryKeyOrdinal = 0, Table = info.Tables[1] }); var model = _factory.Create(info); Assert.Collection(model.GetEntityTypes().Cast<EntityType>(), ef1 => { Assert.Equal("E F", ef1.Relational().TableName); Assert.Equal("E_F", ef1.Name); Assert.Collection(ef1.GetProperties().OfType<Property>(), id => { Assert.Equal("Id", id.Name); }, s1 => { Assert.Equal("San_itized", s1.Name); Assert.Equal("San itized", s1.Relational().ColumnName); }, s2 => { Assert.Equal("San_itized1", s2.Name); Assert.Equal("San_itized", s2.Relational().ColumnName); }); }, ef2 => { Assert.Equal("E_F", ef2.Relational().TableName); Assert.Equal("E_F1", ef2.Name); var id = Assert.Single(ef2.GetProperties().OfType<Property>()); Assert.Equal("Id", id.Name); Assert.Equal("Id", id.Relational().ColumnName); }); }
public void Indexes_and_alternate_keys() { var table = new TableModel { Name = "T", Columns = { new ColumnModel { Name = "C1", DataType = "long", PrimaryKeyOrdinal = 1 }, new ColumnModel { Name = "C2", DataType = "long" }, new ColumnModel { Name = "C3", DataType = "long" } } }; table.Indexes.Add(new IndexModel { Name = "IDX_C1", Columns = { table.Columns[0] }, IsUnique = false }); table.Indexes.Add(new IndexModel { Name = "UNQ_C2", Columns = { table.Columns[1] }, IsUnique = true }); table.Indexes.Add(new IndexModel { Name = "IDX_C2_C1", Columns = { table.Columns[1], table.Columns[0] }, IsUnique = false }); table.Indexes.Add(new IndexModel { /*Name ="UNQ_C3_C1",*/ Columns = { table.Columns[2], table.Columns[0] }, IsUnique = true }); var info = new DatabaseModel { Tables = { table } }; var entityType = (EntityType)_factory.Create(info).GetEntityTypes().Single(); Assert.Collection(entityType.GetIndexes(), indexColumn1 => { Assert.False(indexColumn1.IsUnique); Assert.Equal("IDX_C1", indexColumn1.Relational().Name); Assert.Same(entityType.FindProperty("C1"), indexColumn1.Properties.Single()); }, uniqueColumn2 => { Assert.True(uniqueColumn2.IsUnique); Assert.Same(entityType.FindProperty("C2"), uniqueColumn2.Properties.Single()); }, indexColumn2Column1 => { Assert.False(indexColumn2Column1.IsUnique); Assert.Equal(new[] { "C2", "C1" }, indexColumn2Column1.Properties.Select(c => c.Name).ToArray()); }, uniqueColumn3Column1 => { Assert.True(uniqueColumn3Column1.IsUnique); Assert.Equal(new[] { "C3", "C1" }, uniqueColumn3Column1.Properties.Select(c => c.Name).ToArray()); } ); Assert.Collection(entityType.GetKeys().Where(k => !k.IsPrimaryKey()), single => { Assert.Equal("UNQ_C2", single.Relational().Name); Assert.Same(entityType.FindProperty("C2"), single.Properties.Single()); }, composite => { Assert.Equal(new[] { "C3", "C1" }, composite.Properties.Select(c => c.Name).ToArray()); }); }
public void Primary_key(string[] keyProps, int length) { var ordinal = 3; var info = new DatabaseModel { Tables = { new TableModel { Name = "PkTable", Columns = keyProps.Select(k => new ColumnModel { PrimaryKeyOrdinal = ordinal++, Name = k, DataType = "long" }).ToList() } } }; var model = (EntityType)_factory.Create(info).GetEntityTypes().Single(); Assert.Equal(keyProps, model.FindPrimaryKey().Properties.Select(p => p.Relational().ColumnName).ToArray()); }
public void Unmappable_column_type(string dataType) { var info = new DatabaseModel { Tables = { new TableModel { Name = "E", Columns = { IdColumn } } } }; info.Tables[0].Columns.Add(new ColumnModel { Table = info.Tables[0], Name = "Coli", DataType = dataType }); Assert.Single(_factory.Create(info).FindEntityType("E").GetProperties()); Assert.Contains(RelationalDesignStrings.CannotFindTypeMappingForColumn("E.Coli", dataType), _logger.FullLog); }
public void Column_type_annotation(string dataType, string expectedColumnType) { var info = new DatabaseModel { Tables = { new TableModel { Name = "A", Columns = { new ColumnModel { Name = "Col", DataType = dataType, PrimaryKeyOrdinal = 1 } } } } }; var property = (Property)_factory.Create(info).FindEntityType("A").FindProperty("Col"); Assert.Equal(expectedColumnType, property.Relational().ColumnType); }