private static int CreateModel(Dictionary <string, List <Dict> > dict) { var space = ConfigurationManager.AppSettings["modelnamespace"]; var modelsPath = ConfigurationManager.AppSettings["path"]; if (string.IsNullOrEmpty(space)) { space = "Default.Models"; } if (string.IsNullOrEmpty(modelsPath) || !BaseTool.IsValidPath(modelsPath)) { modelsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Models"); } if (!Directory.Exists(modelsPath)) { Directory.CreateDirectory(modelsPath); } var count = 0; foreach (var tableName in dict) { var sb = new StringBuilder(); var sb1 = new StringBuilder(); var className = string.Empty; if (tableName.Key.LastIndexOf('_') != -1) { foreach (var str in tableName.Key.Split('_')) { if (!string.IsNullOrEmpty(str)) { className += str.Substring(0, 1).ToUpper() + str.Substring(1).ToLower(); } } } else { className = tableName.Key.Substring(0, 1).ToUpper() + tableName.Key.Substring(1).ToLower(); } var firstLetter = className.Substring(0, 1); if (firstLetter != "_" && !RegexTool.IsLetter(firstLetter)) { className = $"_{className}"; } sb.Append("using System;\r\nusing System.ComponentModel.DataAnnotations;\r\nusing System.ComponentModel.DataAnnotations.Schema;\r\n\r\nnamespace "); sb.Append(space); sb.Append("\r\n{\r\n"); var columns = tableName.Value; if (columns.Count > 0) { sb.Append("\t/// <summary>\r\n"); sb.Append("\t/// ").Append(tableName.Value[0].表说明).Append("\r\n"); sb.Append("\t/// </summary>\r\n"); } sb.Append("\t[Table(\"").Append(tableName.Key).Append("\")]\r\n"); //数据标记 sb.Append("\tpublic class "); sb.Append(className); sb.Append("\r\n\t{\r\n"); sb.Append("\t\t#region Model\r\n"); var order = 0; foreach (var column in columns) { var propertieName = string.Empty; if (column.字段名.LastIndexOf('_') != -1) { foreach (var str in column.字段名.Split('_')) { if (!string.IsNullOrEmpty(str)) { propertieName += str.Substring(0, 1).ToUpper() + str.Substring(1).ToLower(); } } } else { propertieName = column.字段名.Substring(0, 1).ToUpper() + column.字段名.Substring(1).ToLower(); } if (propertieName == className) { propertieName = $"_{propertieName}"; } else { firstLetter = propertieName.Substring(0, 1); if (firstLetter != "_" && !RegexTool.IsLetter(firstLetter)) { propertieName = $"_{propertieName}"; if (propertieName == className) { propertieName = $"_{propertieName}"; } } } if (!string.IsNullOrEmpty(column.字段说明)) { sb.Append("\t\t/// <summary>\r\n"); sb.Append("\t\t/// ").Append(column.字段说明).Append("\r\n"); sb.Append("\t\t/// </summary>\r\n"); } if (!string.IsNullOrEmpty(column.主键)) { sb.Append("\t\t[Key, Column(\"").Append(column.字段名).Append("\", Order = ").Append(order).Append(")]\r\n"); order++; } else { sb.Append("\t\t[Column(\"").Append(column.字段名).Append("\")]\r\n"); //数据标记 } if (string.IsNullOrEmpty(column.类型)) { sb.Append("\t\tpublic string " + propertieName + "\r\n\t\t{\r\n"); } else { switch (column.类型.ToLower()) { case "tinyint": { sb.Append("\t\tpublic bool? " + propertieName + "\r\n\t\t{\r\n"); } break; case "smallint": { sb.Append("\t\tpublic short? " + propertieName + "\r\n\t\t{\r\n"); } break; case "int": { sb.Append("\t\tpublic int? " + propertieName + "\r\n\t\t{\r\n"); } break; case "bigint": { sb.Append("\t\tpublic long? " + propertieName + "\r\n\t\t{\r\n"); } break; case "decimal": { sb.Append("\t\tpublic decimal? " + propertieName + "\r\n\t\t{\r\n"); } break; case "timestamp": { sb.Append("\t\tpublic DateTime? " + propertieName + "\r\n\t\t{\r\n"); } break; case "datetime": { sb.Append("\t\tpublic DateTime? " + propertieName + "\r\n\t\t{\r\n"); } break; case "bit": { sb.Append("\t\tpublic bool " + propertieName + "\r\n\t\t{\r\n"); } break; case "money": { sb.Append("\t\tpublic decimal? " + propertieName + "\r\n\t\t{\r\n"); } break; case "image": { sb.Append("\t\tpublic string " + propertieName + "\r\n\t\t{\r\n"); } break; case "nvarchar": { sb.Append("\t\tpublic string " + propertieName + "\r\n\t\t{\r\n"); } break; case "varchar": { sb.Append("\t\tpublic string " + propertieName + "\r\n\t\t{\r\n"); } break; case "text": { sb.Append("\t\tpublic string " + propertieName + "\r\n\t\t{\r\n"); } break; default: { sb.Append("\t\tpublic string " + propertieName + "\r\n\t\t{\r\n"); } break; } } sb.Append("\t\t\tset;\r\n"); sb.Append("\t\t\tget;\r\n"); sb.Append("\t\t}\r\n"); sb.Append("\r\n"); sb1.Append(propertieName); sb1.Append("=\" + "); sb1.Append(propertieName); sb1.Append(" + \","); } if (sb1.Length >= 5) { sb1.Remove(sb1.Length - 5, 5); } sb.Append("\t\tpublic override string ToString()\r\n"); sb.Append("\t\t{\r\n"); sb.Append("\t\t\treturn \""); sb.Append(sb1); sb.Append(";"); sb.Append("\r\n"); sb.Append("\t\t}\r\n"); sb.Append("\t\t#endregion Model\r\n"); sb.Append("\t}\r\n").Append("}"); var filePath = Path.Combine(modelsPath, $"{className}.cs"); if (WriteFile(filePath, sb.ToString())) { count++; } } return(count); }