예제 #1
0
        public async Task Test_Transaction_States()
        {
            var data0 = DataGen.Person(1, 10).ToArray();
            var data1 = DataGen.Person(11, 20).ToArray();

            using (var db = new LiteDatabaseAsync(new MemoryStream()))
            {
                var person = db.GetCollection <Person>();

                // first time transaction will be opened
                (await db.BeginTransAsync()).Should().BeTrue();

                // but in second type transaction will be same
                (await db.BeginTransAsync()).Should().BeFalse();

                await person.InsertAsync(data0);

                // must commit transaction
                (await db.CommitAsync()).Should().BeTrue();

                // no transaction to commit
                (await db.CommitAsync()).Should().BeFalse();

                // no transaction to rollback;
                (await db.RollbackAsync()).Should().BeFalse();

                (await db.BeginTransAsync()).Should().BeTrue();

                // no page was changed but ok, let's rollback anyway
                (await db.RollbackAsync()).Should().BeTrue();

                // auto-commit
                await person.InsertAsync(data1);

                (await person.CountAsync()).Should().Be(20);
            }
        }