public void DistributedTransactionTest()
        {
            //失败事务
            BaseBusiness <Base_UnitTest> _bus1 = new BaseBusiness <Base_UnitTest>();
            BaseBusiness <Base_UnitTest> _bus2 = new BaseBusiness <Base_UnitTest>("BaseDb_Test");

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

            distributedTransaction.BeginTransaction();
            _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
            _bus1.Insert(data1);
            _bus1.Insert(data3);
            _bus2.Insert(data1);
            _bus2.Insert(data2);
            bool succcess = distributedTransaction.EndTransaction();
            int  count1   = _bus1.GetIQueryable().Count();
            int  count2   = _bus2.GetIQueryable().Count();

            Assert.AreEqual(succcess, false);
            Assert.AreEqual(count1, 0);
            Assert.AreEqual(count2, 0);

            //成功事务
            _bus1.DeleteAll();
            _bus2.DeleteAll();
            distributedTransaction = new DistributedTransaction(_bus1.Service, _bus2.Service);
            distributedTransaction.BeginTransaction();
            _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
            _bus1.Insert(data1);
            _bus1.Insert(data3);
            _bus2.Insert(data1);
            _bus2.Insert(data3);
            succcess = distributedTransaction.EndTransaction();
            count1   = _bus1.GetIQueryable().Count();
            count2   = _bus2.GetIQueryable().Count();
            Assert.AreEqual(succcess, true);
            Assert.AreEqual(count1, 3);
            Assert.AreEqual(count2, 2);
        }
Пример #2
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            Task.Factory.StartNew(async() =>
            {
                while (true)
                {
                    try
                    {
                        using (var scop = _serviceProvider.CreateScope())
                        {
                            //单表
                            var db = scop.ServiceProvider.GetService <IMyDbAccessor>();
                            List <Base_UnitTest> insertList = new List <Base_UnitTest>();
                            for (int i = 0; i < 100; i++)
                            {
                                insertList.Add(new Base_UnitTest
                                {
                                    Id         = Guid.NewGuid().ToString(),
                                    Age        = i,
                                    CreateTime = DateTime.Now,
                                    UserName   = Guid.NewGuid().ToString()
                                });
                            }

                            var single = new Base_UnitTest
                            {
                                Id         = Guid.NewGuid().ToString(),
                                Age        = 100,
                                CreateTime = DateTime.Now,
                                UserName   = Guid.NewGuid().ToString()
                            };

                            await db.InsertAsync(single);
                            await db.InsertAsync(insertList);

                            int count = await db.GetIQueryable <Base_UnitTest>().CountAsync();
                            _logger.LogInformation("单表插入数据成功 当前数据量:{Count}", count);

                            //分表
                            var shardingDb = scop.ServiceProvider.GetService <IShardingDbAccessor>();
                            await shardingDb.InsertAsync(single);
                            await shardingDb.InsertAsync(insertList);
                            count = await shardingDb.GetIShardingQueryable <Base_UnitTest>().CountAsync();
                            _logger.LogInformation("分表插入数据成功 当前数据量:{Count}", count);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, "");
                    }

                    await Task.Delay(2000);
                }
            }, TaskCreationOptions.LongRunning);

            await Task.CompletedTask;
        }
 static Base_BusinessTests()
 {
     for (int i = 1; i <= 100; i++)
     {
         Base_UnitTest newData = new Base_UnitTest
         {
             Id       = Guid.NewGuid().ToString(),
             Age      = i,
             UserId   = "Admin" + i,
             UserName = "******" + i
         };
         _dataList.Add(newData);
     }
 }
Пример #4
0
        public BaseTest()
        {
            for (int i = 1; i <= 100; i++)
            {
                Base_UnitTest newData = new Base_UnitTest
                {
                    Id       = Guid.NewGuid().ToString(),
                    Age      = i,
                    UserId   = "Admin" + i,
                    UserName = "******" + i
                };
                _dataList.Add(newData);
            }

            Clear();
        }
Пример #5
0
        public IActionResult Test()
        {
            var           db            = DbFactory.GetRepository();
            Base_UnitTest base_UnitTest = new Base_UnitTest
            {
                Id       = IdHelper.GetId(),
                Age      = int.MaxValue,
                UserId   = IdHelper.GetId(),
                UserName = IdHelper.GetId()
            };

            db.Insert(base_UnitTest);
            db.GetIQueryable <Base_UnitTest>().GetPagination(new Pagination()).ToList();
            db.Update(base_UnitTest);
            db.Delete(base_UnitTest);

            return(Success());
        }
Пример #6
0
        /// <summary>
        /// 压力测试
        /// </summary>
        /// <returns></returns>
        public ActionResult PressTest()
        {
            var           bus  = AutofacHelper.GetScopeService <IBase_UserBusiness>();
            var           db   = DbFactory.GetRepository();
            Base_UnitTest data = new Base_UnitTest
            {
                Id       = Guid.NewGuid().ToString(),
                UserId   = Guid.NewGuid().ToString(),
                Age      = 10,
                UserName = Guid.NewGuid().ToString()
            };

            db.Insert(data);
            db.Update(data);
            db.GetIQueryable <Base_UnitTest>().FirstOrDefault();
            db.Delete(data);

            return(Success(""));
        }
Пример #7
0
        public async Task PressTest2()
        {
            var bus = AutofacHelper.GetScopeService <IBase_UserBusiness>();

            using (var db = DbFactory.GetRepository())
            {
                Base_UnitTest data = new Base_UnitTest
                {
                    Id       = Guid.NewGuid().ToString(),
                    UserId   = Guid.NewGuid().ToString(),
                    Age      = 10,
                    UserName = Guid.NewGuid().ToString()
                };
                await db.InsertAsync(data);

                await db.UpdateAsync(data);

                await db.GetIQueryable <Base_UnitTest>().FirstOrDefaultAsync();

                await db.DeleteAsync(data);
            }
        }
        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);
            })();
        }