Exemplo n.º 1
0
        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);
        }