using System; using System.Data.Common; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Internal; using Xunit; namespace EntityFramework.Jet.FunctionalTests { public class MigrationsJetTest : MigrationsTestBase { public MigrationsJetTest(MigrationsJetFixture fixture) : base(fixture) { } public override void Can_get_active_provider() { base.Can_get_active_provider(); Assert.Equal("EntityFrameworkCore.Jet", ActiveProvider); } protected override async Task AssertFirstMigrationAsync(DbConnection connection) { var sql = await GetDatabaseSchemaAsync(connection); Assert.Equal( @" CreatedTable Id int NOT NULL ColumnWithDefaultToDrop int NULL DEFAULT 0 ColumnWithDefaultToAlter int NULL DEFAULT 1 ", sql); } protected override async Task AssertSecondMigrationAsync(DbConnection connection) { var sql = await GetDatabaseSchemaAsync(connection); Assert.Equal( @" CreatedTable Id int NOT NULL ColumnWithDefaultToAlter int NULL ", sql); } private async Task GetDatabaseSchemaAsync(DbConnection connection) { var builder = new IndentedStringBuilder(); var command = connection.CreateCommand(); command.CommandText = @" SELECT Table, Name, TypeName, Default FROM (SHOW TABLECOLUMNS);"; using (var reader = await command.ExecuteReaderAsync()) { var first = true; string lastTable = null; while (await reader.ReadAsync()) { var currentTable = reader.GetString(0); if (currentTable != lastTable) { if (first) { first = false; } else { builder.DecrementIndent(); } builder .AppendLine() .AppendLine(currentTable) .IncrementIndent(); lastTable = currentTable; } builder .Append(reader[1]) // Name .Append(" ") .Append(reader[2]) // Type .Append(" ") .Append(reader.GetBoolean(3) ? "NULL" : "NOT NULL"); if (!await reader.IsDBNullAsync(4)) { builder .Append(" DEFAULT ") .Append(reader[4]); } builder.AppendLine(); } } return builder.ToString(); } } }