using System; using System.Linq; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; await using var connection = new SqliteConnection("Data Source=:memory:;Foreign Keys=True"); await connection.OpenAsync(); var options = new DbContextOptionsBuilder().UseSqlite(connection).Options; await using var db = new LabDb(options); await db.Database.MigrateAsync(); var applied = (await db.Database.GetAppliedMigrationsAsync()).ToArray(); Check(applied.Length == 1 && applied[0].EndsWith("_Initial", StringComparison.Ordinal), "real initial migration applied"); await db.Database.MigrateAsync(); Check((await db.Database.GetAppliedMigrationsAsync()).Count() == 1, "migration history idempotence"); db.Items.Add(new Item { Name = "migrated" }); await db.SaveChangesAsync(); db.ChangeTracker.Clear(); Check((await db.Items.SingleAsync()).Name == "migrated", "migration-created schema materializes"); Console.WriteLine("history:1"); Console.WriteLine("rows:1"); static void Check(bool condition, string name) { if (!condition) throw new InvalidOperationException("CHECK: " + name); }