public async Task UpdateListConcurrencyCheckNotModifiedAsync()
        {
            using (var db = GetSqlDatabase())
            {
                var p = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Alice", LastName = "Jones", StringId = "aj"
                };
                var q = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Raj", LastName = "Padilla", StringId = "rp"
                };
                var r = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Lidia", LastName = "Bain", StringId = "lb"
                };

                var lst = new[] { p, q, r };

                Assert.True(await db.InsertListAsync(lst));

                p.FirstName = "Emily";
                q.FirstName = "Jim";
                r.FirstName = "Laura";

                Assert.True(await db.UpdateListAsync(lst));

                var gp = await db.GetAsync <PersonConcurrencyCheck>(p.GuidId);

                Assert.Equal("Emily", gp.FirstName);
                Assert.Equal(p.LastName, gp.LastName);
            }
        }
        public async Task UpdateConcurrencyCheckModifiedAsync()
        {
            using (var db = GetSqlDatabase())
            {
                var p = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Alice", LastName = "Jones", StringId = "abc"
                };
                Assert.True(await db.InsertAsync(p));

                // Modify one of the concurrency-check columns to simulate it changing out from underneath us.
                await db.ExecuteAsync("update Person set StringId = 'xyz' where GuidId = @GuidId", p);

                p.FirstName = "Greg";
                p.LastName  = "Smith";
                await Assert.ThrowsAnyAsync <OptimisticConcurrencyException>(() => db.UpdateAsync(p));

                var gp = await db.GetAsync <PersonConcurrencyCheck>(p.GuidId);

                Assert.Equal("Alice", gp.FirstName);
                Assert.Equal("Jones", gp.LastName);
            }
        }
        public async Task UpdateListConcurrencyCheckModifiedAsync()
        {
            using (var db = GetSqlDatabase())
            {
                var p = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Alice", LastName = "Jones", StringId = "aj"
                };
                var q = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Raj", LastName = "Padilla", StringId = "rp"
                };
                var r = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Lidia", LastName = "Bain", StringId = "lb"
                };

                var lst = new[] { p, q, r };

                Assert.True(await db.InsertListAsync(lst));

                p.FirstName = "Emily";
                q.FirstName = "Jim";
                r.FirstName = "Laura";

                // Simulate the data changing out from underneath us by modifying the second item.
                q.StringId += "X";

                await Assert.ThrowsAnyAsync <OptimisticConcurrencyException>(() => db.UpdateListAsync(lst));

                var gp = await db.GetAsync <PersonConcurrencyCheck>(p.GuidId);

                var gq = await db.GetAsync <PersonConcurrencyCheck>(q.GuidId);

                var gr = await db.GetAsync <PersonConcurrencyCheck>(r.GuidId);

                // None of the items should have changed.
                Assert.NotEqual(p.FirstName, gp.FirstName);
                Assert.NotEqual(q.FirstName, gq.FirstName);
                Assert.NotEqual(r.FirstName, gr.FirstName);
            }
        }
        public async Task UpdateConcurrencyCheckNotModifiedAsync()
        {
            using (var db = GetSqlDatabase())
            {
                var p = new PersonConcurrencyCheck {
                    GuidId = Guid.NewGuid(), FirstName = "Alice", LastName = "Jones", StringId = "abc"
                };
                Assert.True(await db.InsertAsync(p));

                Assert.Equal("abc", p.StringId);
                Assert.Null(p.UpdatedOn);

                p.FirstName = "Greg";
                p.LastName  = "Smith";
                Assert.True(await db.UpdateAsync(p), "Concurrent fields unchanged");

                var gp = await db.GetAsync <PersonConcurrencyCheck>(p.GuidId);

                Assert.Equal(p.FirstName, gp.FirstName);
                Assert.Equal(p.LastName, gp.LastName);
                Assert.Equal(p.StringId, gp.StringId);
                Assert.Equal(p.UpdatedOn, gp.UpdatedOn);
            }
        }