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)); }
/// <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(); } }
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)); }
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(); }
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); }
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"); }
/// <summary> /// Saves this current changes to database. /// No auditing will be executed. /// </summary> /// <returns>Status code.</returns> protected int Save() { return(RepositoryContext.Commit()); }