/// <summary>
        /// 保存应用信息
        /// </summary>
        /// <param name="dbContext">上下文对象</param>
        /// <param name="dto">应用信息</param>
        /// <returns>是否成功</returns>
        protected virtual bool SaveApp(IBoundedContext dbContext, SYSAppRegistDTO dto)
        {
            if (!(dto.App.ID > 0))
            {
                InitApp(dto.App);
            }

            return(dto.App.ID.HasValue ? dbContext.Modify(dto.App) : dbContext.Add(dto.App));
        }
        /// <summary>
        /// 保存应用信息
        /// </summary>
        /// <param name="dto">应用信息</param>
        /// <returns>是否成功</returns>
        public virtual bool SaveApp(SYSAppRegistDTO dto)
        {
            using (var dbContext = BoundedContext.Create())
            {
                if (!(SaveApp(dbContext, dto) &&
                      SaveMenu(dbContext, dto) &&
                      SaveAppAccess(dbContext, dto)))
                {
                    return(false);
                }

                dbContext.Commit();
                return(true);
            }
        }
        /// <summary>
        /// 保存应用用户组关联信息
        /// </summary>
        /// <param name="dbContext">上下文对象</param>
        /// <param name="dto">应用信息</param>
        /// <returns>是否成功</returns>
        protected virtual bool SaveAppAccess(IBoundedContext dbContext, SYSAppRegistDTO dto)
        {
            var result    = true;
            var appAccess = dbContext.Repository <SYSAppAccess>();

            if (dto.App.ID > 0)
            {
                appAccess.Remove(new Spec <SYSAppAccess>(d => d.AppID == dto.App.ID));
            }

            if (dto.AppGroups != null)
            {
                foreach (var appAccessInfo in dto.AppGroups)
                {
                    appAccessInfo.AppID = dto.App.ID; if (!(result = appAccess.Add(appAccessInfo)))
                    {
                        break;
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// 保存应用菜单信息
        /// </summary>
        /// <param name="dbContext">上下文对象</param>
        /// <param name="dto">应用信息</param>
        /// <returns>是否成功</returns>
        protected virtual bool SaveMenu(IBoundedContext dbContext, SYSAppRegistDTO dto)
        {
            var menu = dbContext.Repository <SYSMenu>();

            var q = from d in menu.Entities
                    where d.AppID == dto.App.ID &&
                    d.Layer == 0
                    select d;

            var target = q.FirstOrDefault();

            if (target != null)
            {
                dto.Menu.Map(target);
            }
            else
            {
                target = dto.Menu;
            }

            InitMenu(dto.App, target);

            return(target.ID > 0 ? menu.Modify(target) : menu.Add(target));
        }