Пример #1
0
        /// <summary>
        /// 新增模块。
        /// </summary>
        /// <param name="dto">待新增模块的信息。</param>
        /// <returns>新模块的Id。(-2:Tag重复。)</returns>
        public static string InsertModule(ModuleDTO dto)
        {
            Module existingM = GetModuleByTag(dto.Tag);

            if (existingM != null)
            {
                return("-2");
            }

            Db.SessionFactory.EvictQueries("Module");

            //模块基本信息。
            Module m = new Module();

            m.Id        = IdGen.GetNextId(typeof(Module));
            m.Tag       = dto.Tag;
            m.Name      = dto.Name;
            m.Remark    = dto.Remark;
            m.OrderId   = dto.OrderId;
            m.ModuleUrl = dto.ModuleUrl;
            m.Disabled  = dto.Disabled;

            //模块分类。
            ModuleType mt = Db.Session.Load(typeof(ModuleType), dto.ModuleTypeId) as ModuleType;

            mt.AddModule(m);

            //获取新增模块权限的主键值。
            string[] Ids = null;
            if (dto.ModuleRights.Count > 0)
            {
                Ids = IdGen.GetNextId(typeof(ModuleRight), dto.ModuleRights.Count);
            }

            //向数据库保存模块和模块权限。
            ITransaction transaction = Db.Session.BeginTransaction();

            try
            {
                Db.Session.Save(m);
                for (int i = 0; i < dto.ModuleRights.Count; i++)
                {
                    ModuleRight mr = new ModuleRight();
                    mr.Id       = Ids[i];
                    mr.RightTag = dto.ModuleRights[i].ToString();
                    m.AddModuleRight(mr);
                    Db.Session.Save(mr);
                }
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }

            //返回新模块的Id。
            return(m.Id);
        }