/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { String result = null; if (context.Location == BuildLocationType.Property) { result = context.ColumnSchema.Explain; } return(result); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { String result = null; if (context.Location == BuildLocationType.Property) { result = context.ColumnSchema.IsPrimaryKey ? "true" : "false"; } return(result); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { String result = context.SymbolModifier. Modify( context.TableSchema.Name, SymbolModifyType.ClassName ); return(result); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { if (context.Location == BuildLocationType.Property) { String result = context.SymbolModifier. Modify( context.ColumnSchema.Name, SymbolModifyType.FieldName); return(result); } return(null); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { if (context.Location == BuildLocationType.Property) { var schema = context.ColumnSchema; String dbType = context.ColumnSchema.DbTypeString; var mapItems = context.TypeMapConfig.MapItems.Where(t => t.Condition.DbType == dbType); foreach (var mapItem in mapItems) { var condition = mapItem.Condition; if (condition.IsNullable.HasValue) { if (schema.IsNullable != condition.IsNullable.Value) { continue;; } } if (condition.Length != null) { //如果长度为 * ,则列必须有长度信息(但可为任意数值)才能匹配 if (condition.Length == "*") { if (!schema.Length.HasValue) { continue; } } //需要匹配具体的长度 else { if (schema.Length.Value.ToString() != condition.Length) { continue; } } } return(mapItem.MapType); } } return(null); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { String result = Environment.NewLine; return(result); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { String result = context.TableSchema.Explain; return(result); }
/// <summary> /// 继承自 <see cref="IContentSymbol.Analysing"/> /// </summary> public String Analysing(CodeBuildContext context) { String result = context.NameSpace; return(result); }
public void Export(IList <IExportTargeter> exportTargeters, IList <SchemaInfoTuple> schemas, ExportConfig config) { var codeExportConfig = config as CodeExportConfig; List <CodeExportInfo> exportInfos = new List <CodeExportInfo>(); SchemaExportEventArgs exportEventArgs = new SchemaExportEventArgs(); var contentSymbolTable = codeExportConfig.ContentSymbolTable; // 只处理表和视图 var exportSchemaTupleInfos = schemas.Where(t => t.SchemaType == SchemaType.Table || t.SchemaType == SchemaType.View); exportEventArgs.Total = exportSchemaTupleInfos.Count(); CodeBuildContext context = new CodeBuildContext(); context.NameSpace = codeExportConfig.CodeNameSpace; context.Location = BuildLocationType.Main; context.SymbolModifier = codeExportConfig.SymbolModifier; context.TypeMapConfig = codeExportConfig.TypeMapConfig; foreach (var tupleInfo in exportSchemaTupleInfos) { exportEventArgs.SchemaInfo = tupleInfo; CodeExportInfo exportInfo = new CodeExportInfo(); //Key 符号信息,Value 符号解析的结果 var symbolAnalysisTable = new Dictionary <String, String>(); var tableSchema = tupleInfo.ObjectSchema as TableSchemaExtend; var bodyCodeTemplate = codeExportConfig.CodeTemplateConfig.Body; var codeStringBuilder = new StringBuilder(codeExportConfig.CodeTemplateConfig.Body); context.TableSchema = tableSchema; context.ColumnSchema = null; //提取内容符号 var matchCollection = this.ContentSymbolExtracter.Matches(bodyCodeTemplate); foreach (Match match in matchCollection) { var matchValue = match.Value; var symbol = this.ExtractSymbol(matchValue); if (!contentSymbolTable.ContainsKey(symbol)) { continue; } IContentSymbol contentSymbol = contentSymbolTable[symbol]; //如果符号未解析过,或者内容符号的定义表明需要重复解析 if (!symbolAnalysisTable.ContainsKey(matchValue) || contentSymbol.WhetherNeedRepetition) { var analysisResult = contentSymbol.Analysing(context); symbolAnalysisTable[matchValue] = analysisResult; } } //使用符号分析结果填充主模板 foreach (var analysisResult in symbolAnalysisTable) { if (analysisResult.Value != null) { codeStringBuilder.Replace(analysisResult.Key, analysisResult.Value); } } var propertyCodeTemplates = codeExportConfig.CodeTemplateConfig.PropertyCodeTemplates; if (propertyCodeTemplates.Length > 0) { //提取属性内容符号 var propertyMatchCollection = this.PropertyContentSymbolExtracter.Matches(bodyCodeTemplate); if (propertyMatchCollection.Count > 0) { //改变上下文位置 context.Location = BuildLocationType.Property; //遍历提取到的属性内容符号 foreach (Match match in propertyMatchCollection) { var propertySymbol = this.ExtractPrpertySymbol(match.Value); var propertyCodeTemplate = propertyCodeTemplates.Where(t => t.Name == propertySymbol).FirstOrDefault(); if (propertyCodeTemplate == null) { continue; } //提取属性代码模板中的内容符号 var propMatchCollection = this.ContentSymbolExtracter.Matches(propertyCodeTemplate.Content); var propertyCode = new StringBuilder(); //提取所有的内容符号 foreach (var schema in tupleInfo.ColumnSchemas) { var propertyCodeStringBuilder = new StringBuilder(propertyCodeTemplate.Content); var propertySymbolAnalysisTable = new Dictionary <String, String>(); context.ColumnSchema = schema; if (propMatchCollection.Count > 0) { foreach (Match psymbolMatch in propMatchCollection) { var matchValue = psymbolMatch.Value; var symbol = this.ExtractSymbol(matchValue); if (!contentSymbolTable.ContainsKey(symbol)) { continue; } IContentSymbol contentSymbol = contentSymbolTable[symbol]; //如果符号未解析过,或者内容符号的定义表明需要重复解析 if (!propertySymbolAnalysisTable.ContainsKey(matchValue) || contentSymbol.WhetherNeedRepetition) { var analysisResult = contentSymbol.Analysing(context); propertySymbolAnalysisTable[matchValue] = analysisResult; } } } //组合当前 ColumnSchema 的代码 foreach (var analysisResult in propertySymbolAnalysisTable) { if (analysisResult.Value != null) { propertyCodeStringBuilder.Replace(analysisResult.Key, analysisResult.Value); } } //将代码添加到属性模板代码中 propertyCode.Append(propertyCodeStringBuilder); } codeStringBuilder.Replace(match.Value, propertyCode.ToString()); } } } exportInfo.Code = codeStringBuilder.ToString(); exportInfo.FileName = codeExportConfig.SymbolModifier.Modify(tableSchema.Name, SymbolModifyType.ClassName) + codeExportConfig.CodeTemplateConfig.ExtensionName; exportInfos.Add(exportInfo); exportEventArgs.Current += 1; this.ExportProgressChanged?.Invoke(this, exportEventArgs); } //将 Code 信息写入到临时文件中 String directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyyMMddHHmmssfff")); var directoryInfo = Directory.CreateDirectory(directory); foreach (var exportInfo in exportInfos) { String path = Path.Combine(directory, exportInfo.FileName); File.WriteAllText(path, exportInfo.Code); exportInfo.FilePath = path; } String[] exportFiles = exportInfos.Select(t => t.FilePath).ToArray(); foreach (var targeter in exportTargeters) { targeter.PointTo(exportFiles); } //删除临时目录 Directory.Delete(directory, true); }