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 + '"')); }
/// <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(); }