コード例 #1
0
    private string GetOrmContent(string aAssetName)
    {
        if (!mCfgStruct.mAssetDic.ContainsKey(aAssetName))
        {
            return("");
        }
        CfgAssetStruct caStruct     = mCfgStruct.mAssetDic[aAssetName];
        StringBuilder  sbSegment2   = new StringBuilder();
        IList <string> yclFieldName = new List <string>();

        foreach (CfgAssetFieldStruct fcafStruct in caStruct.mFieldList.Where(c => c.mIsEnabled && c.mDataType != -1).Where(c => !yclFieldName.Contains(c.mFieldName)))
        {
            yclFieldName.Add(fcafStruct.mFieldName);
            sbSegment2.AppendFormat(mSegment2, fcafStruct.mColumnCName,
                                    mDataTypes[fcafStruct.mDataType] + (caStruct.mFieldList.Count(c => c.mFieldName == fcafStruct.mFieldName && c.mIsEnabled) > 1 ? "[]" : ""),
                                    fcafStruct.mFieldName);
        }
        if (sbSegment2.Length == 0)
        {
            return("");
        }
        return(string.Format(mSegment1, caStruct.mOrmName, sbSegment2, '"' + caStruct.mTableName + '"'));
    }
コード例 #2
0
    /// <summary>
    /// 读取资源文件列表。
    /// </summary>
    private void LoadConfigList()
    {
        if (!Directory.Exists(pCfgPath))
        {
            return;
        }
        //读取目录里的资源文件及其结构信息
        IDictionary <string, CfgAssetStruct> caStructDic = new Dictionary <string, CfgAssetStruct>();

        foreach (string fPath in Directory.GetFiles(pCfgPath, "*.csv"))
        {
            string sAssetName = Path.GetFileNameWithoutExtension(fPath);
            if (mRgFName.IsMatch(sAssetName))
            {
                Debug.Log(string.Format("资源文件 <{0}> 的名称不符合命名规范", sAssetName));
                continue;
            }
            IList <string> txtLines = LoadResource(fPath);
            if (txtLines == null)
            {
                continue;
            }
            string sOName     = pClassNameUpper ? sAssetName.Substring(0, 1).ToUpper() + sAssetName.Substring(1) : sAssetName;
            string sClassName = sOName;
            if (!string.IsNullOrEmpty(pClassNameSuffix.Trim()))
            {
                sClassName = sOName + pClassNameSuffix.Trim();
            }
            //TODO: 暂时不处理第1列被搞成数组的情况
            CfgAssetStruct caStruct = new CfgAssetStruct {
                mTableName = sOName, mOrmName = sClassName, mFieldList = new List <CfgAssetFieldStruct>()
            };
            string[] sLineC = txtLines[0].Split(new[] { "," }, StringSplitOptions.None);
            string[] sLineE = txtLines[1].Split(new[] { "," }, StringSplitOptions.None);
            for (int i = 0; i < sLineC.Length; i++)
            {
                string sEName = sLineE[i].Trim();
                if (string.IsNullOrEmpty(sEName))
                {
                    Debug.Log(string.Format("资源文件 <{0}> 第{1}列 未设置英文描述", sAssetName, i + 1));
                    caStruct = null;
                    break;
                }
                caStruct.mFieldList.Add(new CfgAssetFieldStruct {
                    mIndex       = i,
                    mColumnCName = sLineC[i].Trim().Replace("\"", "").Replace("\n", "").Replace("\r", ""),
                    mColumnEName = sEName,
                    mFieldName   = pFieldNameUpper ? sEName.Substring(0, 1).ToUpper() + sEName.Substring(1) : sEName,
                    mDataType    = -1,
                    mIsEnabled   = i == 0
                });
            }
            if (caStruct != null)
            {
                caStructDic.Add(sAssetName, caStruct);
            }
        }
        //和系统缓存的配置信息进行比较和合并
        //增加或修改资源信息
        foreach (KeyValuePair <string, CfgAssetStruct> itr1 in caStructDic)
        {
            if (!mCfgStruct.mAssetDic.ContainsKey(itr1.Key))
            {
                //整个资源文件都是新的
                mCfgStruct.mAssetDic.Add(itr1.Key, itr1.Value);
            }
            else
            {
                CfgAssetStruct mcaStruct = mCfgStruct.mAssetDic[itr1.Key];
                mcaStruct.mOrmName = itr1.Value.mOrmName;
                //追加或修改字段信息
                foreach (CfgAssetFieldStruct fcafStruct in itr1.Value.mFieldList)
                {
                    bool bIsFind = false;
                    foreach (CfgAssetFieldStruct fmcafStruct in mcaStruct.mFieldList.Where(c => c.mIndex == fcafStruct.mIndex))
                    {
                        if (fmcafStruct.mColumnCName != fcafStruct.mColumnCName || fmcafStruct.mColumnEName != fcafStruct.mColumnEName)
                        {
                            fmcafStruct.mColumnCName = fcafStruct.mColumnCName;
                            fmcafStruct.mColumnEName = fcafStruct.mColumnEName;
                            if (fmcafStruct.mIndex != 0)
                            {
                                fmcafStruct.mDataType  = -1;
                                fmcafStruct.mIsEnabled = false;
                            }
                        }
                        fmcafStruct.mFieldName = fcafStruct.mFieldName;
                        bIsFind = true;
                        break;
                    }
                    if (!bIsFind)
                    {
                        mcaStruct.mFieldList.Add(fcafStruct);
                    }
                }
                //删除已经不存在的字段信息
                IList <int> mindexList = mcaStruct.mFieldList.Select(c => c.mIndex).ToList();
                foreach (int fmIndex in mindexList)
                {
                    if (itr1.Value.mFieldList.All(c => c.mIndex != fmIndex))
                    {
                        CfgAssetFieldStruct rcafStruct = null;
                        foreach (CfgAssetFieldStruct fcafStruct in mcaStruct.mFieldList.Where(c => c.mIndex == fmIndex))
                        {
                            rcafStruct = fcafStruct;
                        }
                        mcaStruct.mFieldList.Remove(rcafStruct);
                    }
                }
            }
        }
        //删除已经不存在的资源信息
        IList <string> massetNameList = mCfgStruct.mAssetDic.Select(c => c.Key).ToList();

        foreach (string fassetName in massetNameList)
        {
            if (caStructDic.All(c => c.Key != fassetName))
            {
                mCfgStruct.mAssetDic.Remove(fassetName);
            }
        }
        //清空读取的资源文件及其结构信息
        caStructDic.Clear();
    }