/// <summary>
        /// 根据 父级Argument、子级枚举值  获取子级枚Custom
        /// </summary>
        /// <param name="Argument">父级Argument</param>
        /// <param name="value">子级名称</param>
        /// <returns></returns>
        public string GetCustom(string Argument, int val)
        {
            FDataDictionary fDataDictionary = fdataDictionaries.FirstOrDefault(aa => aa.Argument == Argument) ?? throw new OperateException($"未知异常,{nameof(GetCustom)}:{Argument}");
            DataDictionary  dataDictionary  = fDataDictionary.DataDictionary.FirstOrDefault(aa => aa.Value == val) ?? throw new OperateException($"未知异常,{nameof(GetCustom)}:{nameof(Argument)}:{Argument}---{nameof(val)}:{ val }");

            return(dataDictionary.Custom);
        }
        /// <summary>
        /// 根据父级Argument,子级名称,获取子级对象
        /// </summary>
        /// <param name="Argument"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public DataDictionary ITEM(string Argument, string name)
        {
            FDataDictionary fDataDictionary = fdataDictionaries.FirstOrDefault(aa => aa.Argument == Argument) ?? throw new OperateException($"未知异常,{nameof(ITEM)}:{Argument}");
            var             dataDictionary  = fDataDictionary.DataDictionary.FirstOrDefault(aa => aa.Key == name) ?? throw new OperateException($"未知异常,{nameof(ITEM)}:{nameof(Argument)}:{Argument}---{nameof(name)}:{name}");

            return(dataDictionary);
        }
        /// <summary>
        /// 根据 父级Argument、子级名称  获取子级枚Custom
        /// </summary>
        /// <param name="Argument">父级Argument</param>
        /// <param name="key">子级名称</param>
        /// <returns></returns>
        public string GetCustom(string Argument, string key)
        {
            FDataDictionary fDataDictionary = fdataDictionaries.FirstOrDefault(aa => aa.Argument == Argument) ?? throw new OperateException($"未知异常,{nameof(GetCustom)}:{Argument}");
            DataDictionary  dataDictionary  = fDataDictionary.DataDictionary.FirstOrDefault(aa => aa.Key == key) ?? throw new OperateException($"未知异常,{nameof(GetCustom)}:{nameof(Argument)}:{Argument}---{nameof(key)}:{ key }");

            return(dataDictionary.Custom);
        }
        /// <summary>
        /// 编辑父级字典
        /// </summary>
        /// <param name="changedDataDictionary">父级实体对象</param>
        public void Edit(FDataDictionary changedDataDictionary)
        {
            var args = new DataDictionaryDataChangedArgs
            {
                DictionaryChangeType = ChangeType.Edit
            };

            using (var db = new ShopEntities())
            {
                var entity = db.FDataDictionary.Where(p => p.FDictionaryID == changedDataDictionary.FDictionaryID).FirstOrDefault() ?? throw new OperateException("指定的字典父级已删除");
                var data   = db.FDataDictionary.Where(p => p.Argument == changedDataDictionary.Argument).FirstOrDefault();
                if (entity.Argument != changedDataDictionary.Argument && data != null)
                {
                    throw new OperateException("已存在同值父级");
                }
                db.Entry(entity).State = EntityState.Detached;
                db.Entry(db.FDataDictionary.Attach(changedDataDictionary)).State = EntityState.Modified;
                db.SaveChanges();
                args.Add(changedDataDictionary);
            }
            try
            {
                Task.Run(() => DataDictionaryDataChanged?.Invoke(null, args));
            }
            catch
            {
            }
        }
        /// <summary>
        ///  根据父级Argument、子级名称 获取自己枚举值(仅允许g_config使用)
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public int VALUE_CONFIG(string name)
        {
            string          Argument        = "g_config";
            FDataDictionary fDataDictionary = fdataDictionaries.FirstOrDefault(aa => aa.Argument == Argument) ?? throw new OperateException($"未知异常,{nameof(VALUE)}:{Argument}");
            DataDictionary  dataDictionary  = fDataDictionary.DataDictionary.FirstOrDefault(aa => aa.Name == name) ?? throw new OperateException($"未知异常,{nameof(VALUE)}:{nameof(Argument)}:{Argument}---{nameof(name)}:{ name}");

            return(dataDictionary.Value);
        }
        /// <summary>
        /// 编辑父级字典
        /// </summary>
        public void FEditDictionary()
        {
            RequestUser();
            int             FDictionaryID = int.Parse(GetParams("FDictionaryID"));
            string          Name          = GetParams("Name");
            string          Argument      = GetParams("Argument");
            FDataDictionary fd            = new FDataDictionary();

            fd.FDictionaryID = FDictionaryID;
            fd.Name          = Name;
            fd.Argument      = Argument;
            IDDC.Edit(fd);
        }
 /// <summary>
 /// 编辑字典
 /// </summary>
 /// <param name="entity">参数实体对象</param>
 public void Edit(EdtiDataDictionary entity)
 {
     if (entity.fDictionaryID.HasValue)
     {
         var data = new DataDictionary
         {
             Color         = entity.Color,
             Custom        = entity.custom,
             Key           = entity.key,
             DictionaryID  = entity.DictionaryID,
             FDictionaryID = entity.fDictionaryID.Value,
             Icon          = entity.icon,
             Name          = entity.Name
         };
         try
         {
             data.Value = int.Parse(entity.value);
         }
         catch (FormatException ex)
         {
             throw new OperateException("子级字典值应是一个数值", ex);
         }
         Edit(data);
     }
     else
     {
         var data = new FDataDictionary
         {
             Name          = entity.key,
             Argument      = entity.value,
             FDictionaryID = entity.DictionaryID
         };
         Edit(data);
     }
     InitList();
 }
        /// <summary>
        /// 添加字典
        /// </summary>
        /// <param name="entity">参数实体对象</param>
        public void Add(DataDictionaryAddParams entity)
        {
            var args = new DataDictionaryDataChangedArgs
            {
                DictionaryChangeType = ChangeType.Add
            };

            using (var db = new ShopEntities())
            {
                //判断可空类型是否有值,如果有值返回true反之false
                if (entity.FID.HasValue)
                {
                    int value;
                    if (!int.TryParse(entity.Value, out value))
                    {
                        throw new OperateException("子级字典值应是数值");
                    }
                    if (db.DataDictionary.Where(p => p.Value == value && p.FDictionaryID == entity.FID).Count() > 0)
                    {
                        throw new OperateException("值重复");
                    }
                    var dataDictionary = new DataDictionary
                    {
                        FDictionaryID = entity.FID.Value,
                        Color         = entity.Color,
                        Icon          = entity.Icon,
                        Key           = entity.Key,
                        Custom        = entity.Custom,
                        Value         = value,
                        Name          = entity.Name
                    };
                    db.DataDictionary.Add(dataDictionary);
                    args.Add(dataDictionary);
                }
                else
                {
                    if (db.FDataDictionary.Where(p => p.Argument.Equals(entity.Value)).Count() > 0)
                    {
                        throw new OperateException("值重复");
                    }
                    var fDataDictionary = new FDataDictionary
                    {
                        Name     = entity.Key,
                        Argument = entity.Value,
                    };
                    db.FDataDictionary.Add(fDataDictionary);
                    args.Add(fDataDictionary);
                }
                if (!(db.SaveChanges() > 0))
                {
                    throw new OperateException("数据库错误,没有数据变化");
                }
            }
            try
            {
                Task.Run(() => DataDictionaryDataChanged?.Invoke(null, args));
            }
            catch
            {
            }
            InitList();
        }
 /// <summary>
 /// 添加变更的实体
 /// </summary>
 public void Add(FDataDictionary entity)
 {
     fDataDictionary.Add(entity);
 }
        /**
         * 说明:(在数据库中 Argument、Value 才是唯一的)
         *      1、获取查询父级时 FDataDictionary 对象以 Argument 字段唯一区分
         *      2、获取查询子级时 DataDictionary 对象以 Value 字段唯一区分
         *      3、添加特殊 查询方法时 方法需要 static 化
         *
         * **/

        /// <summary>
        /// 根据父级Argument  获取子级列表
        /// </summary>
        /// <param name="Argument">父级Argument</param>
        /// <returns></returns>
        public List <DataDictionary> LIST(string Argument)
        {
            FDataDictionary fDataDictionary = fdataDictionaries.FirstOrDefault(aa => aa.Argument == Argument) ?? throw new OperateException($"未知异常,LIST:{Argument}");

            return(fDataDictionary.DataDictionary.ToList());
        }
 /// <summary>
 /// 编辑父级字典
 /// </summary>
 /// <param name="changedDataDictionary">父级实体对象</param>
 public void Edit(FDataDictionary changedDataDictionary)
 {
     IDDM.Edit(changedDataDictionary);
 }