public ICommandHandlerResult Execute(ICommandContext context, DistributeGroupResourceCommand command) { var group = this.groupRepository.Rebuild(command.GroupId); if (group == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } var department = this.departmentRepository.Rebuild(group.DepartmentId); if (department == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } var groupResources = this.groupResourceRepository.RebuildRootUsingGroupId(command.GroupId); if (groupResources.IsNullOrEmpty()) { var list = new List <GroupResourceAggregateRoot>(100); foreach (var r in command.ResourceId) { var cmd = new CreateGroupResourceCommand(NewId.GenerateNumber(NewId.StringLength.L24)) { GroupId = command.GroupId, ResourceId = r, }; var root = context.GetAggregateRoot(cmd.AggregateId, () => GroupResourceAggregateRoot.Register(context, cmd, department)); if (root.CanCommit()) { list.Add(root); } } this.groupResourceRepository.Save(list); return(context.CreateResult(CommandHandlerStatus.Success)); } //表明这些是新增的,在新加的记录中删除已经存在的 var news = new List <GroupResourceAggregateRoot>(100); foreach (var r in command.ResourceId) { if (groupResources.Any(t => t.ResourceId == r)) { continue; } var cmd = new CreateGroupResourceCommand(NewId.GenerateNumber(NewId.StringLength.L24)) { GroupId = command.GroupId, ResourceId = r, }; var root = context.GetAggregateRoot(cmd.AggregateId, () => GroupResourceAggregateRoot.Register(context, cmd, department)); if (root.CanCommit()) { news.Add(root); } } if (news.Any()) { this.groupResourceRepository.Save(news); } //表明这些是已经存在,在已经存在的记录中删除不是新的记录中 var deletes = new List <GroupResourceAggregateRoot>(100); foreach (var r in groupResources) { if (command.ResourceId.Any(t => t == r.ResourceId)) { continue; } r.Remove(context); if (r.CanCommit()) { deletes.Add(r); } } if (deletes.Any()) { this.groupResourceRepository.Remove(deletes); } return(context.CreateResult(CommandHandlerStatus.Success)); }