Esempio n. 1
0
        public UserDTO AddUser(UserDTO userDTO)
        {
            if (userDTO == null)
            {
                throw new ArgumentNullException("用户不能为空");
            }

            User user = Mapper.Map <UserDTO, User>(userDTO);

            userRepository.Add(user);
            RepositoryContext.Commit();
            return(Mapper.Map <User, UserDTO>(user));
        }
Esempio n. 2
0
 /// <summary>
 /// 发货
 /// </summary>
 /// <param name="orderId"></param>
 public void Dispatch(Guid orderId)
 {
     using (var transactionScope = new TransactionScope())
     {
         var order = _orderRepository.GetByKey(orderId);
         order.Dispatch();
         //Dispatch: 实体方法,处理逻辑主要是更新订单的状态和更新时间,
         //然后再将该事件发布到EventBus(MsmqEventBus),EventBus(MsmqEventBus)中保存了一个队列来存放事件,发布操作的实现就是往该队列插入一个待处理的事件
         _orderRepository.Update(order);
         RepositoryContext.Commit();
         _eventBus.Commit();//Commit:对队列中的事件进行出队列操作,通过事件聚合类来获得对应事件处理器来对出队列的事件进行处理
         transactionScope.Complete();
     }
 }
Esempio n. 3
0
        public MenuDTO AddMenu(MenuDTO dto)
        {
            if (string.IsNullOrEmpty(dto.Name))
            {
                throw new ArgumentNullException("菜单名字不能为空");
            }
            if (string.IsNullOrEmpty(dto.Category))
            {
                throw new ArgumentNullException("菜单分类不能为空");
            }
            if (dto.OrderIndex <= 0)
            {
                throw new ArgumentNullException("菜单排序必须大于0");
            }

            Menu menu = Mapper.Map <MenuDTO, Menu>(dto);

            menuRepository.Add(menu);
            RepositoryContext.Commit();

            return(Mapper.Map <Menu, MenuDTO>(menu));
        }
Esempio n. 4
0
        public void AddProductToCart(Guid customerId, Guid productId, int quantity)
        {
            var user = _userRepository.GetByKey(customerId);

            //备注:源代码此处 可以加载到shoppingCart.User的值,而这里不能,为什么?(已解决,仓储上下文必须单例)
            var shoppingCart = _shoppingCartRepository.GetBySpecification(new ExpressionSpecification <ShoppingCart>(s => s.User.Id == user.Id));

            /*调试代码*/
            //var shoppingCart1 = _shoppingCartRepository.GetBySpecification(new ExpressionSpecification<ShoppingCart>(s => s.User.Id == user.Id),s=>s.User);
            //var userInfo = shoppingCart.User;   /*User 非vitrual  不支持延时加载*/
            /*以上*/
            if (shoppingCart == null)
            {
                throw new DomainException("用户{0}不存在购物车", customerId);
            }

            var product          = _productRepository.GetByKey(productId);
            var shoppingCartItem = _shoppingCartItemRepository.FindItem(shoppingCart, product);

            if (shoppingCartItem == null)
            {
                shoppingCartItem = new ShoppingCartItem()
                {
                    Product      = product,
                    ShoopingCart = shoppingCart,
                    Quantity     = quantity
                };

                _shoppingCartItemRepository.Add(shoppingCartItem);
            }
            else
            {
                shoppingCartItem.UpdateQuantity(shoppingCartItem.Quantity + quantity);
                _shoppingCartItemRepository.Update(shoppingCartItem);
            }
            RepositoryContext.Commit();
        }
Esempio n. 5
0
        public static void Test(string connString)
        {
            int count = 0;
            var user  = new User {
                UniqueId = 1, UserName = "******", Age = 28, Sex = Sex.Male, DeptId = 1, UpdatedAt = DateTime.Now
            };
            var user1 = new User {
                UniqueId = 2, UserName = "******", Age = 24, Sex = Sex.Female, DeptId = 2, UpdatedAt = DateTime.Now
            };
            var repository = new Repository <User>(connString);

            //删除
            count = repository.Delete(user);
            count = repository.Delete(user1);

            //创建
            count = repository.Create(user);
            count = repository.Create(user1);

            //获取
            user = repository.QueryFirst("SELECT Id UniqueId,UserName,Sex FROM Coin_User WHERE Id=@UniqueId", user);
            user = repository.Get(user);

            //更新
            user.UserName = "******";
            user.Sex      = Sex.Female;
            count         = repository.Update(f => f.Sex, user);
            count         = repository.Update(f => new { f.UserName, f.Sex }, user);

            //动态SQL更新
            var builder = new SqlBuilder();

            builder.RawSql("UPDATE Coin_User SET UserName=@UserName")
            .AddField(user.Sex.HasValue, "Sex=@Sex")
            .AddSql("WHERE Id=@UniqueId")
            .Where(user.UpdatedAt.HasValue, "UpdatedAt>@UpdatedAt");
            count = repository.Update(builder.BuildSql(), user);

            count = repository.Update(f => f.RawSql("UPDATE Coin_User SET UserName=@UserName")
                                      .AddField(user.Sex.HasValue, "Sex=@Sex")
                                      .AddSql("WHERE Id=@UniqueId")
                                      .Where(user.UpdatedAt.HasValue, "UpdatedAt>@UpdatedAt"), user);

            //查询&动态SQL
            var list = repository.Query(f => f.RawSql("SELECT * FROM Coin_User")
                                        .Where(user.Sex.HasValue, "Sex=@Sex")
                                        .Where(user.UpdatedAt.HasValue, "UpdatedAt>@UpdatedAt")
                                        .AddSql("ORDER BY UpdatedAt DESC"), user);

            //分页
            var userInfoList = repository.QueryPage <UserInfo>("SELECT Id UniqueId,UserName,Sex FROM Coin_User WHERE Id>@UniqueId", 0, 10, "ORDER BY Id", user);

            //事务
            var context = new RepositoryContext(connString);

            try
            {
                var repository1    = context.RepositoryFor();
                var repositoryUser = context.RepositoryFor <User>();
                var repositoryDept = context.RepositoryFor <Dept>();
                context.Begin();
                var deptInfo = repository1.QueryFirst <DeptInfo>("SELECT A.DeptId,B.PersonTotal FROM Coin_User A,Coin_Dept B WHERE A.DeptId=B.Id AND A.Id=@UniqueId", new { UniqueId = 1 });
                repositoryUser.Delete(new User {
                    UniqueId = 1
                });
                repositoryDept.Update(f => f.PersonTotal, new Dept {
                    UniqueId = deptInfo.DeptId, PersonTotal = deptInfo.PersonTotal - 1
                });
                context.Commit();
            }
            catch (Exception ex)
            {
                context.Rollback();
            }
            //多结果集
            var order = new Order {
                Id = 1
            };
            var orderRepository = new Repository <Order>(connString);
            var sql             = "SELECT * FROM Coin_Order WHERE Id=@Id;SELECT * FROM Coin_OrderLine WHERE OrderId=@Id";
            var reader          = orderRepository.QueryMultiple(sql, order);

            order       = reader.Read <Order>();
            order.Lines = reader.ReadList <OrderLine>();

            order = orderRepository.QueryMap(map =>
            {
                var result   = map.Read();
                result.Lines = map.ReadList <OrderLine>();
                return(result);
            }, sql, order);

            order.Number = "123456789";
            orderRepository.Update(f => f.Number, order);
        }
Esempio n. 6
0
        public static async Task TestAsync(string connString)
        {
            int count = 0;
            var user  = new User {
                UniqueId = 1, UserName = "******", Age = 28, Sex = Sex.Male, DeptId = 1, UpdatedAt = DateTime.Now
            };
            var user1 = new User {
                UniqueId = 2, UserName = "******", Age = 24, Sex = Sex.Female, DeptId = 2, UpdatedAt = DateTime.Now
            };
            var dept = new Dept {
                UniqueId = 1, DeptName = "IT", PersonTotal = 1, UpdatedAt = DateTime.Now
            };
            var dept1 = new Dept {
                UniqueId = 2, DeptName = "HR", PersonTotal = 1, UpdatedAt = DateTime.Now
            };
            var repository = new Repository <User>(connString);



            //删除
            count = await repository.DeleteAsync(user);

            count = await repository.DeleteAsync(user1);

            //创建
            count = await repository.CreateAsync(user);

            count = await repository.CreateAsync(user1);

            //获取
            user = await repository.QueryFirstAsync("SELECT Id UniqueId,UserName,Sex FROM Coin_User WHERE Id=@UniqueId", user);

            user = await repository.GetAsync(user);

            //全量更新
            await repository.UpdateAsync(user);

            //更新
            user.UserName = "******";
            user.Sex      = Sex.Female;
            count         = await repository.UpdateAsync(f => f.Sex, user);

            count = await repository.UpdateAsync(f => new { f.UserName, f.Sex }, user);

            count = await repository.UpdateAsync(user);

            //动态SQL更新
            var builder = new SqlBuilder();

            builder.RawSql("UPDATE Coin_User SET UserName=@UserName", user.UserName)
            .AddField(user.Sex.HasValue, "Sex=@Sex", user.Sex)
            .RawSql("WHERE Id=@UniqueId", user.UniqueId)
            .AndWhere(user.UpdatedAt.HasValue, "UpdatedAt>@UpdatedAt", user.UpdatedAt);
            count = await repository.UpdateAsync(builder.BuildSql(), user);

            count = await repository.UpdateAsync(f =>
                                                 f.RawSql("UPDATE Coin_User SET UserName=@UserName", user.UserName)
                                                 .AddField(user.Sex.HasValue, "Sex=@Sex", user.Sex)
                                                 .RawSql("WHERE Id=@UniqueId", user.UniqueId)
                                                 .AndWhere(user.UpdatedAt.HasValue, "UpdatedAt>@UpdatedAt", user.UpdatedAt));

            //查询&动态SQL
            var list = await repository.QueryAsync(f =>
            {
                f.RawSql("SELECT * FROM Coin_User")
                .AndWhere(user.Sex.HasValue, "Sex=@Sex", user.Sex)
                .AndWhere(user.UpdatedAt.HasValue, "UpdatedAt>@UpdatedAt", user.UpdatedAt)
                .RawSql("ORDER BY UpdatedAt DESC");
            });

            //分页
            var userInfoList = await repository.QueryPageAsync <UserInfo>("SELECT Id UniqueId,UserName,Sex FROM Coin_User WHERE Id>@UniqueId", 0, 10, "ORDER BY Id", user);

            //事务
            var context = new RepositoryContext(connString);

            try
            {
                var repository1    = context.RepositoryFor();
                var repositoryUser = context.RepositoryFor <User>();
                var repositoryDept = context.RepositoryFor <Dept>();
                context.Begin();
                count = await repositoryDept.CreateAsync(dept);

                count = await repositoryDept.CreateAsync(dept1);

                var deptInfo = await repository1.QueryFirstAsync <DeptInfo>("SELECT A.DeptId,B.PersonTotal FROM Coin_User A,Coin_Dept B WHERE A.DeptId=B.Id AND A.Id=@UniqueId", new { UniqueId = 1 });

                count = await repositoryUser.DeleteAsync(new User { UniqueId = 1 });

                count = await repositoryDept.UpdateAsync(f => f.PersonTotal, new Dept { UniqueId = deptInfo.DeptId, PersonTotal = deptInfo.PersonTotal - 1 });

                context.Commit();
            }
            catch
            {
                context.Rollback();
            }

            //多结果集
            var order = new Order {
                Id = 1
            };
            var orderRepository = new Repository <Order>(connString);
            var sql             = "SELECT * FROM Coin_Order WHERE Id=@Id;SELECT * FROM Coin_OrderLine WHERE OrderId=@Id";

            List <OrderLine> orderLineList = new List <OrderLine>();

            orderLineList.Add(new OrderLine
            {
                LineId    = 1,
                ProductId = 1,
                Price     = 15.5,
                Quantity  = 2,
                Amount    = 15.5 * 2
            });
            orderLineList.Add(new OrderLine
            {
                LineId    = 2,
                ProductId = 2,
                Price     = 20,
                Quantity  = 2,
                Amount    = 40
            });
            var order1 = new Order {
                Id = 1, BuyerId = 1, Number = "12345", Lines = orderLineList
            };

            count = await orderRepository.DeleteAsync(order1);

            count = await orderRepository.CreateAsync(order1);

            var reader = await orderRepository.QueryMultipleAsync(sql, order);

            order       = reader.Read <Order>();
            order.Lines = reader.ReadList <OrderLine>();

            order = await orderRepository.QueryMapAsync(map =>
            {
                var result   = map.Read <Order>();
                result.Lines = map.ReadList <OrderLine>();
                return(result);
            }, sql, order);

            order.Number = "123456789";
            await orderRepository.UpdateAsync(f => f.Number, order);

            var dict = repository.QueryDictionaryAsync <int, string>("SELECT Id [Key],UserName [Value] FROM Coin_User");
        }
Esempio n. 7
0
 /// <summary>
 /// Saves this current changes to database.
 /// No auditing will be executed.
 /// </summary>
 /// <returns>Status code.</returns>
 protected int Save()
 {
     return(RepositoryContext.Commit());
 }