コード例 #1
0
        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");
        }
コード例 #2
0
        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");
            }
        }
コード例 #3
0
        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());
        }