Example #1
0
        public void Multiple_UnitofWorkCommit()
        {
            Action work1 = () =>
            {
                var t14Repo = LocalServiceLocator.GetService <IT14Repository>();
                t14Repo.Add(new T14(Guid.NewGuid().ToString("N"), "ok"));
                t14Repo.Context.Commit();
                //return t14Repo.Context;
            };

            Action work2 = () =>
            {
                var orderRepository = LocalServiceLocator.GetService <IYmtOrderRepository>();
                var order           = new YmtOrder("aacd0bc4-34e5-4c0f-a255-214d567698cd", "test_order", 77);
                order.AddOrderLine(new OrderLine(100))
                .AddOrderLine(new OrderLine(120))
                .AddOrderLine(new OrderLine(150))
                .SetAddress(new ReceiptAddress {
                    City = "A", Zip = "B", Street = "C"
                });
                var verify = order.Validator();
                Console.WriteLine(verify.Message);
                Assert.AreEqual(true, verify.Success);
                orderRepository.AddOrUpdate(e => e.Id, order);
                orderRepository.Context.Commit();
                //return orderRepository.Context;
            };

            MultipleUnitOfWorkBuilder.Instance.Commit(work1, work2);
            //using (MultipleUnitOfWorkBuilder.Instance.Append(work1).Append(work2).Commit())
            //{
            //};
        }
Example #2
0
        public void SaveBath_Order()
        {
            var orderRepository = LocalServiceLocator.GetService <IYmtOrderRepository>();

            //var orderList = new HashSet<Ymt_OrderLine>();
            for (var i = 0; i < 50000; i++)
            {
                //1.
                var order = new YmtOrder(Guid.NewGuid().ToString(), "ok", 20M);

                order.SetAddress(new ReceiptAddress {
                    City = "A", Street = "B", Zip = "CCC"
                });
                //2.
                //这里是DTO映射到实体
                //var order = orderDto.MapTo<OrderDto, Ymt_Order>();

                //3.
                //这里是实体验证(实体需要继承 IValidatableObject 接口),主意:如果不显示执行xx.Validatory 方法,程序会自动隐式执行实体验证
                var val = order.Validator();
                Assert.AreEqual(true, val.Success, val.Message);
                //验证的原始写法
                //var entityValidator = EntityValidatorFactory.CreateValidator();
                //Assert.AreEqual(false, entityValidator.IsValid(order));

                //3.
                //
                orderRepository.Add(order);
            }
            //4
            var result = orderRepository.Context.Commit();

            Assert.AreEqual(true, result.Success);
            Assert.AreEqual(3, result.ResultData);
        }
Example #3
0
        public void OneToOne_Order()
        {
            var order = new YmtOrder(Guid.NewGuid().ToString("N"), "TT", 55.78M);

            Assert.AreEqual(true, order.Validator().ResultData.Success);
            //1:1
            order.SetAddress(new ReceiptAddress {
                City = "A", Street = "C", Zip = "D"
            });
            var orderRepository = LocalServiceLocator.GetService <IYmtOrderRepository>();

            orderRepository.Add(order);
            var x = orderRepository.Context.Commit();

            Assert.AreEqual(1, x.ResultData);
        }
Example #4
0
        public void OneToMany_Order()
        {
            var order = new YmtOrder(Guid.NewGuid().ToString(), "test order", 12M);

            //
            order.AddOrderLine(new OrderLine(100))
            .AddOrderLine(new OrderLine(120))
            .AddOrderLine(new OrderLine(150))
            .SetAddress(new ReceiptAddress {
                City = "A", Zip = "B", Street = "C"
            });
            var orderRepository = LocalServiceLocator.GetService <IYmtOrderRepository>();

            orderRepository.Add(order);
            var x = orderRepository.Context.AsyncCommit();

            Assert.True(x.Result.ResultData > 0);
        }
Example #5
0
        public void AddOrUpdateOrder()
        {
            var orderRepository = new YmtOrderRepository(new EFUnitOfWork("orderContext"));//LocalServiceLocator.GetService<IYmtOrderRepository>();
            var order           = new YmtOrder("0000b222-db89-4c4b-b226-1fc694d3d065", "test order", 60);

            //
            order.AddOrderLine(new OrderLine(100))
            .AddOrderLine(new OrderLine(120))
            .AddOrderLine(new OrderLine(150))
            .SetAddress(new ReceiptAddress {
                City = "A", Zip = "B", Street = "C"
            });
            var verify = order.Validator();

            Console.WriteLine(verify.Message);
            Assert.AreEqual(true, verify.Success);
            orderRepository.AddOrUpdate(e => e.Id, order);
            orderRepository.Context.Commit();
        }
Example #6
0
        static void Main(string[] args)
        {
            var list = new List <YmtOrder>(50000);

            for (var i = 0; i < 3; i++)
            {
                //1.
                var order = YmtOrder.Create("ok", 20M);
                order.SetAddress(new ReceiptAddress {
                    City = "A", Street = "B", Zip = "CCC"
                });
                //2.
                //这里是DTO映射到实体
                //var order = orderDto.MapTo<OrderDto, Ymt_Order>();

                //3.
                //这里是实体验证(实体需要继承 IValidatableObject 接口),主意:如果不显示执行xx.Validatory 方法,程序会自动隐式执行实体验证
                var val = order.Validator();
                if (!val.Success)
                {
                    throw new Exception("出错");
                }
                //验证的原始写法
                //var entityValidator = EntityValidatorFactory.CreateValidator();
                //Assert.AreEqual(false, entityValidator.IsValid(order));

                //3.
                //
                // orderRepository.Add(order);
                list.Add(order);
            }

            Console.Read();
            SetUp();
            var orderRepository = LocalServiceLocator.GetService <IYmtOrderRepository>();
            //var orderList = new HashSet<Ymt_OrderLine>();
            var watch = Stopwatch.StartNew();

            for (var i = 0; i < 50000; i++)
            {
                //1.
                var order = YmtOrder.Create("ok", 20M);
                order.SetAddress(new ReceiptAddress {
                    City = "A", Street = "B", Zip = "CCC"
                });
                //2.
                //这里是DTO映射到实体
                //var order = orderDto.MapTo<OrderDto, Ymt_Order>();

                //3.
                //这里是实体验证(实体需要继承 IValidatableObject 接口),主意:如果不显示执行xx.Validatory 方法,程序会自动隐式执行实体验证
                var val = order.Validator();
                if (!val.Success)
                {
                    throw new Exception("出错");
                }
                //验证的原始写法
                //var entityValidator = EntityValidatorFactory.CreateValidator();
                //Assert.AreEqual(false, entityValidator.IsValid(order));

                //3.
                //
                // orderRepository.Add(order);
                list.Add(order);
            }
            Console.WriteLine("添加耗时1 {0} 秒", watch.ElapsedMilliseconds / 1000.0);
            orderRepository.Add(list);
            Console.WriteLine("添加耗时2 {0} 秒", watch.ElapsedMilliseconds / 1000.0);
            //4
            var result = orderRepository.Context.Commit();

            Console.WriteLine("结果:{0},写入耗时 {1} 秒", result.ResultData, watch.ElapsedMilliseconds / 1000.0);
            Stop();
            Console.Read();
        }
Example #7
0
        public void ConcurrentTest()
        {
            if (YmatouFramework.Status != YmatouFrameworkStatus.Started)
            {
                throw new System.InvalidOperationException("框架未启动");
            }
            var listTask = new List <Task>();

            {
                var th = new Task(() =>
                {
                    YmtOrder tmpOrder = null;

                    try
                    {
                        //new YmtOrderRepository(new EFUnitOfWork("orderContext")); //
                        OrderRepo(orderRepository =>
                        {
                            tmpOrder = orderRepository.FindOne("0000b222-db89-4c4b-b226-1fc694d3d065");
                            //tmpOrder.Name = string.Format("并发测试{0}",DateTime.Now.Second);
                            Console.WriteLine("当前价格b{0}", tmpOrder.Price);
                            tmpOrder.Price += 20;
                            orderRepository.Update(tmpOrder);
                            // using (var _context = orderRepository.UnitOfWork)
                            {
                                orderRepository.UnitOfWork.Commit();
                            }

                            Console.WriteLine("当前价格b1 {0}", tmpOrder.Price);
                            //orderRepository.Context.Dispose();
                            Console.WriteLine("当前线程1 {0}", Thread.CurrentThread.ManagedThreadId);
                        });
                        // var orderRepository = LocalServiceLocator.GetService<IYmtOrderRepository>();
                        //using (var unitOfWork = LocalServiceLocator.GetService<IEFUnitOfWork>("order") /*LocalServiceLocator.GetService<IDbContextFactory>().CreateContext<YmtTradingUnitOfwork>()*/)
                        //{
                        //    var orderRepository = LocalServiceLocator.GetService<IRepositoryFactory>().CreateRepository<YmtOrder, YmtOrderRepository>(unitOfWork);
                        //    tmpOrder = orderRepository.FindOne("0000b222-db89-4c4b-b226-1fc694d3d065");
                        //    Console.WriteLine("当前价格b {0}", tmpOrder.Price);
                        //    tmpOrder.Price += 20;
                        //    orderRepository.Update(tmpOrder);

                        //    //using (var _context = orderRepository.UnitOfWork)
                        //    //{
                        //    orderRepository.UnitOfWork.Commit();
                        //    //}

                        //    Console.WriteLine("当前价格b1 {0}", tmpOrder.Price);
                        //    Console.WriteLine("当前线程 {0}", Thread.CurrentThread.ManagedThreadId);
                        //}
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                });
                var th2 = new Task(() =>
                {
                    YmtOrder tmpOrder = null;

                    try
                    {
                        //new YmtOrderRepository(new EFUnitOfWork("orderContext")); //
                        //var orderRepository = LocalServiceLocator.GetService<IYmtOrderRepository>();
                        OrderRepo(orderRepository =>
                        {
                            tmpOrder = orderRepository.FindOne("0000b222-db89-4c4b-b226-1fc694d3d065");
                            //tmpOrder.Name = string.Format("并发测试{0}",DateTime.Now.Second);
                            Console.WriteLine("当前价格a {0}", tmpOrder.Price);
                            tmpOrder.Price += 10;
                            orderRepository.Update(tmpOrder);
                            // using (var _context = orderRepository.UnitOfWork)
                            {
                                orderRepository.UnitOfWork.Commit();
                            }

                            Console.WriteLine("当前价格a2 {0}", tmpOrder.Price);
                            //orderRepository.Context.Dispose();
                            Console.WriteLine("当前线程 {0}", Thread.CurrentThread.ManagedThreadId);
                        });
                        //using (var unitOfWork = LocalServiceLocator.GetService<IEFUnitOfWork>("order") /*LocalServiceLocator.GetService<IDbContextFactory>().CreateContext<YmtTradingUnitOfwork>()*/)
                        //{
                        //    var orderRepository = LocalServiceLocator.GetService<IRepositoryFactory>().CreateRepository<YmtOrder, YmtOrderRepository>(unitOfWork);
                        //    tmpOrder = orderRepository.FindOne("0000b222-db89-4c4b-b226-1fc694d3d065");
                        //    //tmpOrder.Name = string.Format("并发测试{0}",DateTime.Now.Second);
                        //    Console.WriteLine("当前价格a {0}", tmpOrder.Price);
                        //    tmpOrder.Price += 10;
                        //    orderRepository.Update(tmpOrder);
                        //    // using (var _context = orderRepository.UnitOfWork)
                        //    {
                        //        orderRepository.UnitOfWork.Commit();
                        //    }

                        //    Console.WriteLine("当前价格a2 {0}", tmpOrder.Price);
                        //    //orderRepository.Context.Dispose();
                        //    Console.WriteLine("当前线程 {0}", Thread.CurrentThread.ManagedThreadId);
                        //}
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                });
                listTask.Add(th);
                listTask.Add(th2);
            }

            listTask.Each(e => e.Start());
            Task.WaitAll(listTask.ToArray());
        }