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.EnsureCreatedAsync(); var item = new Item { Name = "rune" }; db.Items.Add(item); Check(db.Entry(item).State == EntityState.Added, "added"); Console.WriteLine(db.Entry(item).State); await db.SaveChangesAsync(); Check(item.Id > 0 && db.Entry(item).State == EntityState.Unchanged, "saved identity"); Console.WriteLine(db.Entry(item).State); item.Name = "revised"; db.ChangeTracker.DetectChanges(); Check(db.Entry(item).State == EntityState.Modified, "detected edit"); Console.WriteLine(db.Entry(item).State); await db.SaveChangesAsync(); db.ChangeTracker.Clear(); Check(db.Entry(item).State == EntityState.Detached, "detached"); Console.WriteLine(db.Entry(item).State); } await using (var verify = new LabDb(options)) Check((await verify.Items.SingleAsync()).Name == "revised", "persisted rename"); static void Check(bool condition, string name) { if (!condition) throw new InvalidOperationException("CHECK: " + name); }