Esempio n. 1
0
        public void DistributedTransactionIsSuccessfulAndReturnsResult()
        {
            const string tableName = "DistributedTransaction";

            CreateTable(tableName);
            var pocoA = new PocoA {
                Name = Guid.NewGuid().ToString(), Value = 1
            };
            var pocoB = new PocoB {
                Name = Guid.NewGuid().ToString(), Value = 2
            };

            using (var commander = CreateCommander())
            {
                var record = commander.Execute(() =>
                {
                    var t1 = commander.Execute(pocoA, typeof(Execute), tableName) ? pocoA : null;
                    var t2 = commander.Execute(pocoB, typeof(Execute), tableName) ? pocoB : null;
                    return(new MultiMapPocoB
                    {
                        PocoA = t1,
                        PocoB = t2
                    });
                });

                Same(pocoA, record.PocoA);
                Same(pocoB, record.PocoB);
            }
        }
Esempio n. 2
0
        public void ReturnsIdentity()
        {
            // not really an "execute" method, but:
            //  returning scope_identity is more of
            //  "return" value (GET) than it is a
            //  persistence operation. it's the
            //  second half of a two part operation.
            const string tableName = "IdentityTest";

            CreateTable(tableName);
            var model = new PocoA {
                Name = Guid.NewGuid().ToString(), Value = 1
            };

            using (var commander = CreateCommander())
            {
                commander.Execute(() =>
                {
                    var result = commander.Query <int>(new { model.Name, model.Value }, typeof(Execute), "ReturnsIdentity");
                    Equal(1, result.Single());
                    result = commander.Query <int>(new { model.Name, model.Value }, typeof(Execute), "ReturnsIdentity");
                    Equal(2, result.Single());
                    result = commander.Query <int>(new { model.Name, model.Value }, typeof(Execute), "ReturnsIdentity");
                    Equal(3, result.Single());
                    return(result);
                });
            }
        }
Esempio n. 3
0
        public void SupportsTransactionRollback()
        {
            var model = new PocoA {
                Name = Guid.NewGuid().ToString(), Value = int.MaxValue
            };

            using (var commander = CreateCommander())
            {
                var result = Throws <SqlException>(() => commander.Execute(model, typeof(Execute)));

                // check if the record has been rolled back.
                var record = commander.Query <PocoA>(new { Name = model.Name }, method: "SupportsTransactionRollback.Query");
                NotNull(record);
                False(record.Any());
            }
        }
Esempio n. 4
0
        public async Task SupportsTransactionRollback()
        {
            var model = new PocoA {
                Name = Guid.NewGuid().ToString(), Value = int.MaxValue
            };

            using (var commander = CreateCommander())
            {
                var result = await ThrowsAsync <SqlException>(() => commander.ExecuteAsync(model, typeof(ExecuteAsync)));

                // check if the record has been rolled back.
                var records = commander.Query <PocoA>(new { Name = model.Name }, typeof(ExecuteAsync), "SupportsTransactionRollback.Query");
                NotNull(records);
                False(records.Any());
            }
        }
Esempio n. 5
0
        public async Task AsynchronousDistributedTransactionIsSuccessfulAndReturnsResult()
        {
            const string tableName = "DistributedTransactionAsync";

            CreateTable(tableName);
            var pocoA = new PocoA {
                Name = Guid.NewGuid().ToString(), Value = 1
            };
            var pocoB = new PocoB {
                Name = Guid.NewGuid().ToString(), Value = 2
            };

            using (var commander = CreateCommander())
            {
                var record = await commander.ExecuteAsync(() =>
                {
                    var t1 = commander.Execute(pocoA, typeof(Execute), method: tableName) ? pocoA : null;
                    var t2 = commander.Execute(pocoB, typeof(Execute), method: tableName) ? pocoB : null;
                    return(new MultiMapPocoB
                    {
                        PocoA = t1,
                        PocoB = t2
                    });
                });

                ReferenceEquals(pocoA, record.PocoA);
                ReferenceEquals(pocoB, record.PocoB);
            }

            // now query.
            using (var commander = CreateCommander())
            {
                var result = commander.Query <MultiMapPocoB>(type: typeof(ExecuteAsync), method: "DistributedTransactionAsync.Query");
                NotNull(result);
                True(result.Any());
                Equal(2, result.Count());

                // confirm the result corresponds to the poco's passed
                True(result.Any(x => x.Name == pocoA.Name));
                True(result.Any(x => x.Name == pocoB.Name));
            }
        }