Beispiel #1
0
        public void InsertPrimaryKeyAutoIncrement()
        {
            const string  dataName        = "John Doe";
            const int     dataAge         = 56;
            const decimal dataSavings     = (decimal)345.23;
            var           dataDateOfBirth = DateTime.Now;

            var poco = new UserDecorated();

            poco.Name        = dataName;
            poco.Age         = dataAge;
            poco.Savings     = dataSavings;
            poco.DateOfBirth = dataDateOfBirth;
            Database.Insert(poco);

            Assert.IsTrue(poco.UserId > 0, "POCO failed to insert.");

            var verify = Database.SingleOrDefaultById <UserDecorated>(poco.UserId);

            Assert.IsNotNull(verify);

            Assert.AreEqual(poco.UserId, verify.UserId);
            Assert.AreEqual(dataName, verify.Name);
            Assert.AreEqual(dataAge, verify.Age);
            Assert.AreEqual(dataSavings, verify.Savings);
        }
        // This will fail using SQLite in-memory as the transaction wraps the whole connection :/ Will probably need
        // to switch over to SQLite file based at some point. So that one connection can create the DB and a different connection can
        // do the tests.
        public void ExternalTransactionDiscarded()
        {
            using (var scope = Database.GetTransaction())
            {
                var user = new UserDecorated
                {
                    Name        = "Name" + 16,
                    Age         = 20 + 16,
                    DateOfBirth = new DateTime(1970, 1, 1).AddYears(16),
                    Savings     = 50.00m + (1.01m * 16)
                };
                InMemoryUsers.Add(user);
                Database.Insert(user);

                var extra = new ExtraUserInfoDecorated
                {
                    UserId   = user.UserId,
                    Email    = "email" + 16 + "@email.com",
                    Children = 16
                };
                InMemoryExtraUserInfos.Add(extra);
                Database.Insert(extra);
            }

            var count = Database.ExecuteScalar <long>("SELECT COUNT(*) FROM Users");

            Assert.AreEqual(count, 15);
        }
        public void SingleOrDefaultIntoWithNoRecord()
        {
            var u = new UserDecorated();
            var user = Database.SingleOrDefaultInto(u, "select u.* from users u where u.userid = -1");

            AssertUserValues(u, new UserDecorated());
            Assert.Null(user);
        }
        public void SingleOrDefaultInto()
        {
            var u = new UserDecorated();
            var user = Database.SingleOrDefaultInto(u, "select u.* from users u where u.userid = 1");

            AssertUserValues(InMemoryUsers[0], u);
            Assert.AreEqual(u, user);
        }
        public void NestedTransactionThatFailsAbortsWholeUsingBeginAbort()
        {
            Database.BeginTransaction();
            Database.BeginTransaction();


            var user1 = new UserDecorated
            {
                Name        = "Name" + 16,
                Age         = 20 + 16,
                DateOfBirth = new DateTime(1970, 1, 1).AddYears(16),
                Savings     = 50.00m + (1.01m * 16)
            };

            InMemoryUsers.Add(user1);
            Database.Insert(user1);

            var extra1 = new ExtraUserInfoDecorated
            {
                UserId   = user1.UserId,
                Email    = "email" + 16 + "@email.com",
                Children = 16
            };

            InMemoryExtraUserInfos.Add(extra1);
            Database.Insert(extra1);

            Database.AbortTransaction();

            var user = new UserDecorated
            {
                Name        = "Name" + 16,
                Age         = 20 + 16,
                DateOfBirth = new DateTime(1970, 1, 1).AddYears(16),
                Savings     = 50.00m + (1.01m * 16)
            };

            InMemoryUsers.Add(user);
            Database.Insert(user);

            var extra = new ExtraUserInfoDecorated
            {
                UserId   = user.UserId,
                Email    = "email" + 16 + "@email.com",
                Children = 16
            };

            InMemoryExtraUserInfos.Add(extra);
            Database.Insert(extra);

            Database.CompleteTransaction();

            var count = Database.ExecuteScalar <long>("SELECT COUNT(*) FROM Users");

            Assert.AreEqual(15, count);
        }
        public void TransactionSettingsDontCauseLocksAndTransationRollback()
        {
            var nameInsert = "Name" + 16;
            var ageInsert  = 20 + 16;
            var nameUpdate = "Name" + 99;
            var ageUpdate  = 20 + 99;

            var user = new UserDecorated
            {
                Name        = nameInsert,
                Age         = ageInsert,
                DateOfBirth = new DateTime(1970, 1, 1).AddYears(16),
                Savings     = 50.00m + (1.01m * 16)
            };

            Database.Insert(user);

            var userAfterCreate = Database.SingleOrDefault <UserDecorated>("WHERE UserID = @0", user.UserId);

            Assert.IsNotNull(userAfterCreate);
            Assert.AreEqual(userAfterCreate.Name, nameInsert);


            var dbTrans = new Database(TestDatabase.ConnectionString, new SqlServer2012DatabaseType());

            dbTrans.BeginTransaction();

            user.Name = nameUpdate;
            user.Age  = ageUpdate;
            dbTrans.Update(user);

            // Verify inside of transaction
            var userPreCommitInside = dbTrans.SingleOrDefault <UserDecorated>("WHERE UserID = @0", user.UserId);

            Assert.IsNotNull(userPreCommitInside);
            Assert.AreEqual(nameUpdate, userPreCommitInside.Name);
            Assert.AreEqual(ageUpdate, userPreCommitInside.Age);

            dbTrans.AbortTransaction();
            dbTrans.Dispose();

            var userPostCommit = Database.SingleOrDefault <UserDecorated>("WHERE UserID = @0", user.UserId);

            Assert.IsNotNull(userPostCommit);
            Assert.AreEqual(nameInsert, userPostCommit.Name);
            Assert.AreEqual(ageInsert, userPostCommit.Age);
        }
        public void UpdateOrInsert()
        {
            const string  dataName        = "John Doe";
            const int     dataAge         = 56;
            const decimal dataSavings     = (decimal)345.23;
            var           dataDateOfBirth = DateTime.Now;

            const string  secondName        = "John Doe modified";
            const int     secondAge         = 60;
            const decimal secondSavings     = (decimal)111.11;
            var           secondDateOfBirth = DateTime.Now.AddDays(1);

            var poco = new UserDecorated();

            poco.UserId      = 9999;
            poco.Name        = dataName;
            poco.Age         = dataAge;
            poco.Savings     = dataSavings;
            poco.DateOfBirth = dataDateOfBirth;
            Database.UpdateOrInsert(poco);

            var verify = Database.SingleOrDefaultById <UserDecorated>(poco.UserId);

            Assert.IsNotNull(verify);

            Assert.AreEqual(poco.UserId, verify.UserId);
            Assert.AreEqual(dataName, verify.Name);
            Assert.AreEqual(dataAge, verify.Age);
            Assert.AreEqual(dataSavings, verify.Savings);

            poco.Name        = secondName;
            poco.Age         = secondAge;
            poco.Savings     = secondSavings;
            poco.DateOfBirth = secondDateOfBirth;
            Database.UpdateOrInsert(poco);

            verify = Database.SingleOrDefaultById <UserDecorated>(poco.UserId);
            Assert.IsNotNull(verify);

            Assert.AreEqual(poco.UserId, verify.UserId);
            Assert.AreEqual(secondName, verify.Name);
            Assert.AreEqual(secondAge, verify.Age);
            Assert.AreEqual(secondSavings, verify.Savings);
        }
 public void SingleIntoWithNoRecord()
 {
     var u = new UserDecorated();
     Assert.Throws<InvalidOperationException>(() => Database.SingleInto(u, "select u.* from users u where u.userid = -1"));
 }