Exemple #1
0
        public TransactionContainer(IServiceProvider serviceProvider)
        {
            _distributedTransaction = DistributedTransactionFactory.GetDistributedTransaction();

            var repositories = GlobalData.AllFxTypes.Where(x =>
                                                           typeof(IRepository).IsAssignableFrom(x) &&
                                                           x.IsInterface
                                                           ).Select(x => serviceProvider.GetService(x) as IRepository)
                               .ToArray();

            _distributedTransaction.AddRepository(repositories);
        }
Exemple #2
0
        public TransactionContainer(IServiceProvider serviceProvider)
        {
            _distributedTransaction = DistributedTransactionFactory.GetDistributedTransaction();

            var allRepositoryInterfaces = GlobalData.AllFxTypes.Where(x =>
                                                                      typeof(IDbAccessor).IsAssignableFrom(x) &&
                                                                      x.IsInterface &&
                                                                      x != typeof(IDbAccessor)
                                                                      ).ToList();

            allRepositoryInterfaces.Add(typeof(IDbAccessor));

            var repositories = allRepositoryInterfaces
                               .Select(x => serviceProvider.GetService(x) as IDbAccessor)
                               .ToArray();

            _distributedTransaction.AddDbAccessor(repositories);
        }
Exemple #3
0
        public void DistributedTransaction()
        {
            //失败事务
            var db1 = ServiceProvider.GetService <ISQLiteDb1>();
            var db2 = ServiceProvider.GetService <ISQLiteDb2>();

            db1.DeleteAll <Base_UnitTest>();
            db2.DeleteAll <Base_UnitTest>();
            Base_UnitTest data1 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data2 = new Base_UnitTest
            {
                Id       = data1.Id,
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data3 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "2",
                UserName = Guid.NewGuid().ToString()
            };

            new Action(() =>
            {
                var transaction = DistributedTransactionFactory.GetDistributedTransaction();
                transaction.AddDbAccessor(db1, db2);
                var succcess = transaction.RunTransaction(() =>
                {
                    db1.ExecuteSql("insert into Base_UnitTest(Id,CreateTime) values('10',@CreateTime) ", ("@CreateTime", DateTime.Now));
                    db1.Insert(data1);
                    db1.Insert(data2);
                    db2.Insert(data1);
                    db2.Insert(data3);
                });
                Assert.IsFalse(succcess.Success);
                Assert.AreEqual(0, db1.GetIQueryable <Base_UnitTest>().Count());
                Assert.AreEqual(0, db2.GetIQueryable <Base_UnitTest>().Count());
            })();

            //成功事务
            new Action(() =>
            {
                var transaction = DistributedTransactionFactory.GetDistributedTransaction();
                transaction.AddDbAccessor(db1, db2);

                var succcess = transaction
                               .RunTransaction(() =>
                {
                    db1.ExecuteSql("insert into Base_UnitTest(Id,CreateTime) values('10',@CreateTime) ", ("@CreateTime", DateTime.Now));
                    db1.Insert(data1);
                    db1.Insert(data3);
                    db2.Insert(data1);
                    db2.Insert(data3);
                });
                int count1 = db1.GetIQueryable <Base_UnitTest>().Count();
                int count2 = db2.GetIQueryable <Base_UnitTest>().Count();
                Assert.IsTrue(succcess.Success);
                Assert.AreEqual(3, count1);
                Assert.AreEqual(2, count2);
            })();
        }
        public void DistributedTransactionTest()
        {
            //失败事务
            IRepository _bus1 = DbFactory.GetRepository();
            IRepository _bus2 = DbFactory.GetRepository("BaseDb_Test");

            _bus1.DeleteAll <Base_UnitTest>();
            _bus2.DeleteAll <Base_UnitTest>();
            Base_UnitTest data1 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data2 = new Base_UnitTest
            {
                Id       = data1.Id,
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data3 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "2",
                UserName = Guid.NewGuid().ToString()
            };

            new Action(() =>
            {
                var succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2)
                               .RunTransaction(() =>
                {
                    _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
                    _bus1.Insert(data1);
                    _bus1.Insert(data2);
                    _bus2.Insert(data1);
                    _bus2.Insert(data3);
                });
                Assert.AreEqual(succcess.Success, false);
                Assert.AreEqual(_bus1.GetIQueryable <Base_UnitTest>().Count(), 0);
                Assert.AreEqual(_bus2.GetIQueryable <Base_UnitTest>().Count(), 0);
            })();

            //成功事务
            new Action(() =>
            {
                var succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2)
                               .RunTransaction(() =>
                {
                    _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
                    _bus1.Insert(data1);
                    _bus1.Insert(data3);
                    _bus2.Insert(data1);
                    _bus2.Insert(data3);
                });
                int count1 = _bus1.GetIQueryable <Base_UnitTest>().Count();
                int count2 = _bus2.GetIQueryable <Base_UnitTest>().Count();
                Assert.AreEqual(succcess.Success, true);
                Assert.AreEqual(count1, 3);
                Assert.AreEqual(count2, 2);
            })();
        }
Exemple #5
0
        public void DistributedTransaction()
        {
            //失败事务
            IRepository _db1 = DbFactory.GetRepository("DataSource=db.db", DatabaseType.SQLite);
            IRepository _db2 = DbFactory.GetRepository("DataSource=db2.db", DatabaseType.SQLite);

            _db1.DeleteAll <Base_UnitTest>();
            _db2.DeleteAll <Base_UnitTest>();
            Base_UnitTest data1 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data2 = new Base_UnitTest
            {
                Id       = data1.Id,
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data3 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "2",
                UserName = Guid.NewGuid().ToString()
            };

            new Action(() =>
            {
                var transaction = DistributedTransactionFactory.GetDistributedTransaction();
                transaction.AddRepository(_db1, _db2);
                var succcess = transaction.RunTransaction(() =>
                {
                    _db1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
                    _db1.Insert(data1);
                    _db1.Insert(data2);
                    _db2.Insert(data1);
                    _db2.Insert(data3);
                });
                Assert.IsFalse(succcess.Success);
                Assert.AreEqual(0, _db1.GetIQueryable <Base_UnitTest>().Count());
                Assert.AreEqual(0, _db2.GetIQueryable <Base_UnitTest>().Count());
            })();

            //成功事务
            new Action(() =>
            {
                var transaction = DistributedTransactionFactory.GetDistributedTransaction();
                transaction.AddRepository(_db1, _db2);

                var succcess = transaction
                               .RunTransaction(() =>
                {
                    _db1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
                    _db1.Insert(data1);
                    _db1.Insert(data3);
                    _db2.Insert(data1);
                    _db2.Insert(data3);
                });
                int count1 = _db1.GetIQueryable <Base_UnitTest>().Count();
                int count2 = _db2.GetIQueryable <Base_UnitTest>().Count();
                Assert.IsTrue(succcess.Success);
                Assert.AreEqual(3, count1);
                Assert.AreEqual(2, count2);
            })();
        }
Exemple #6
0
        public void DistributedTransaction()
        {
            //失败事务
            IDbAccessor _db1 = DbFactory.GetDbAccessor(Config.SQLITE1, DatabaseType.SQLite);
            IDbAccessor _db2 = DbFactory.GetDbAccessor(Config.SQLITE2, DatabaseType.SQLite);

            _db1.DeleteAll <Base_UnitTest>();
            _db2.DeleteAll <Base_UnitTest>();
            Base_UnitTest data1 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data2 = new Base_UnitTest
            {
                Id       = data1.Id,
                UserId   = "1",
                UserName = Guid.NewGuid().ToString()
            };
            Base_UnitTest data3 = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = "2",
                UserName = Guid.NewGuid().ToString()
            };

            new Action(() =>
            {
                var transaction = DistributedTransactionFactory.GetDistributedTransaction();
                transaction.AddDbAccessor(_db1, _db2);
                var succcess = transaction.RunTransaction(() =>
                {
                    _db1.ExecuteSql("insert into Base_UnitTest(Id,CreateTime) values('10',@CreateTime) ", ("@CreateTime", DateTime.Now));
                    _db1.Insert(data1);
                    _db1.Insert(data2);
                    _db2.Insert(data1);
                    _db2.Insert(data3);
                });
                Assert.IsFalse(succcess.Success);
                Assert.AreEqual(0, _db1.GetIQueryable <Base_UnitTest>().Count());
                Assert.AreEqual(0, _db2.GetIQueryable <Base_UnitTest>().Count());
            })();

            //成功事务
            new Action(() =>
            {
                var transaction = DistributedTransactionFactory.GetDistributedTransaction();
                transaction.AddDbAccessor(_db1, _db2);

                var succcess = transaction
                               .RunTransaction(() =>
                {
                    _db1.ExecuteSql("insert into Base_UnitTest(Id,CreateTime) values('10',@CreateTime) ", ("@CreateTime", DateTime.Now));
                    _db1.Insert(data1);
                    _db1.Insert(data3);
                    _db2.Insert(data1);
                    _db2.Insert(data3);
                });
                int count1 = _db1.GetIQueryable <Base_UnitTest>().Count();
                int count2 = _db2.GetIQueryable <Base_UnitTest>().Count();
                Assert.IsTrue(succcess.Success);
                Assert.AreEqual(3, count1);
                Assert.AreEqual(2, count2);
            })();
        }