public void TestBookDeletedConcurrencyFixed() { //SETUP var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>(); var config = new GenericEventRunnerConfig(); config.RegisterSaveChangesExceptionHandler <SqlEventsDbContext>(BookWithEventsConcurrencyHandler.HandleCacheValuesConcurrency); var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>(config: config); context.Database.EnsureCreated(); var books = WithEventsEfTestData.CreateDummyBooks(2); context.AddRange(books); context.SaveChanges(); //ATTEMPT books.First().AuthorsLink.Last().Author.ChangeName("New common name"); //This simulates changing the AuthorsOrdered value context.Database.ExecuteSqlRaw("DELETE FROM Books WHERE BookId = @p0", books.First().BookId); //ATTEMPT context.SaveChanges(); //VERIFY var readBooks = context.Books.ToList(); readBooks.Count().ShouldEqual(1); readBooks.First().AuthorsOrdered.ShouldEqual("Author0001, New common name"); }
public void TestCreateBookTwoAuthorsChangeCommonAuthorOk() { //SETUP var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>(); { var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>(); context.Database.EnsureCreated(); var books = WithEventsEfTestData.CreateDummyBooks(2); context.AddRange(books); context.SaveChanges(); //ATTEMPT books.First().AuthorsOrdered.ShouldEqual("Author0000, CommonAuthor"); books.First().AuthorsLink.Last().Author.ChangeName("New common name"); context.SaveChanges(); //VERIFY var readBooks = context.Books.ToList(); readBooks.First().AuthorsOrdered.ShouldEqual("Author0000, New common name"); readBooks.Last().AuthorsOrdered.ShouldEqual("Author0001, New common name"); } }
public void TestChangeAuthorOrderedCauseConcurrencyThrown() { //SETUP var options = SqliteInMemory.CreateOptions <SqlEventsDbContext>(); var context = options.CreateDbWithDiForHandlers <SqlEventsDbContext, ReviewAddedHandler>(); context.Database.EnsureCreated(); var books = WithEventsEfTestData.CreateDummyBooks(2); context.AddRange(books); context.SaveChanges(); //ATTEMPT books.First().AuthorsLink.Last().Author.ChangeName("New common name"); //This simulates changing the AuthorsOrdered value context.Database.ExecuteSqlRaw( "UPDATE Books SET AuthorsOrdered = @p0 WHERE BookId = @p1", "different author string", books.First().BookId); //VERIFY Assert.Throws <DbUpdateConcurrencyException>(() => context.SaveChanges()); }