示例#1
0
        /// <summary>生成简易版实体接口</summary>
        /// <param name="tables">表集合</param>
        /// <param name="option">可选项</param>
        /// <returns></returns>
        public static Int32 BuildInterfaces(IList <IDataTable> tables, BuilderOption option = null)
        {
            if (option == null)
            {
                option = new BuilderOption();
            }
            else
            {
                option = option.Clone();
            }

            option.Interface = true;
            option.Partial   = true;

            if (Debug)
            {
                XTrace.WriteLine("生成简易接口 {0}", option.Output.GetBasePath());
            }

            var count = 0;

            foreach (var item in tables)
            {
                // 跳过排除项
                if (option.Excludes.Contains(item.Name))
                {
                    continue;
                }
                if (option.Excludes.Contains(item.TableName))
                {
                    continue;
                }

                var builder = new ClassBuilder
                {
                    Table  = item,
                    Option = option.Clone(),
                };
                if (Debug)
                {
                    builder.Log = XTrace.Log;
                }

                builder.Load(item);

                // 自定义模型
                var modelInterface = item.Properties["ModelInterface"];
                if (!modelInterface.IsNullOrEmpty())
                {
                    builder.Option.ClassNameTemplate = modelInterface;
                }

                builder.Execute();
                builder.Save(null, true, false);

                count++;
            }

            return(count);
        }
示例#2
0
        /// <summary>修正模型文件</summary>
        /// <param name="xmlFile"></param>
        /// <param name="option"></param>
        /// <param name="atts"></param>
        /// <param name="tables"></param>
        public static void FixModelFile(String xmlFile, BuilderOption option, IDictionary <String, String> atts, IList <IDataTable> tables)
        {
            // 保存文件名
            if (xmlFile.IsNullOrEmpty())
            {
                xmlFile = atts["ModelFile"];
            }

            // 反哺。确保输出空特性
            atts["Output"]    = option.Output + "";
            atts["NameSpace"] = option.Namespace + "";
            atts["ConnName"]  = option.ConnName + "";
            atts["BaseClass"] = option.BaseClass + "";
            atts.Remove("NameIgnoreCase");
            atts.Remove("IgnoreNameCase");
            atts.Remove("ChineseFileName");
            atts.Remove("ModelFile");

            // 更新xsd
            atts["xmlns"]             = atts["xmlns"].Replace("ModelSchema", "Model2020");
            atts["xs:schemaLocation"] = atts["xs:schemaLocation"].Replace("ModelSchema", "Model2020");

            // 保存模型文件
            var xmlContent = File.ReadAllText(xmlFile);
            var xml2       = ModelHelper.ToXml(tables, atts);

            if (xmlContent != xml2)
            {
                File.WriteAllText(xmlFile, xml2);
            }
        }
示例#3
0
文件: ClassBuilder.cs 项目: pjy612/X
        /// <summary>加载模型文件</summary>
        /// <param name="xmlFile">Xml模型文件</param>
        /// <param name="option">生成可选项</param>
        /// <param name="atts">扩展属性字典</param>
        /// <returns></returns>
        public static IList <IDataTable> LoadModels(String xmlFile, BuilderOption option, out IDictionary <String, String> atts)
        {
            if (xmlFile.IsNullOrEmpty())
            {
                var di = ".".GetBasePath().AsDirectory();
                //XTrace.WriteLine("未指定模型文件,准备从目录中查找第一个xml文件 {0}", di.FullName);
                // 选当前目录第一个
                xmlFile = di.GetFiles("*.xml", SearchOption.TopDirectoryOnly).FirstOrDefault()?.FullName;
            }

            if (xmlFile.IsNullOrEmpty())
            {
                throw new Exception("找不到任何模型文件!");
            }

            xmlFile = xmlFile.GetBasePath();
            if (!File.Exists(xmlFile))
            {
                throw new FileNotFoundException("指定模型文件不存在!", xmlFile);
            }

            // 导入模型
            var xmlContent = File.ReadAllText(xmlFile);

            atts = new NullableDictionary <String, String>(StringComparer.OrdinalIgnoreCase)
            {
                ["xmlns"]             = "http://www.newlifex.com/Model2022.xsd",
                ["xmlns:xs"]          = "http://www.w3.org/2001/XMLSchema-instance",
                ["xs:schemaLocation"] = "http://www.newlifex.com http://www.newlifex.com/Model2022.xsd"
            };

            if (Debug)
            {
                XTrace.WriteLine("导入模型:{0}", xmlFile);
            }

            // 导入模型
            var tables = ModelHelper.FromXml(xmlContent, DAL.CreateTable, atts);

            if (option != null)
            {
                option.Output    = atts["Output"] ?? Path.GetDirectoryName(xmlFile);
                option.Namespace = atts["NameSpace"] ?? Path.GetFileNameWithoutExtension(xmlFile);
                option.ConnName  = atts["ConnName"];
                option.BaseClass = atts["BaseClass"];
            }

            // 保存文件名
            atts["ModelFile"] = xmlFile;

            return(tables);
        }
示例#4
0
        /// <summary>为Xml模型文件生成实体类</summary>
        /// <param name="tables">模型文件</param>
        /// <param name="option">生成可选项</param>
        /// <param name="chineseFileName">是否中文名称</param>
        public static Int32 BuildTables(IList <IDataTable> tables, BuilderOption option, Boolean chineseFileName = true)
        {
            if (tables == null || tables.Count == 0)
            {
                return(0);
            }

            if (option == null)
            {
                option = new BuilderOption();
            }
            else
            {
                option = option.Clone();
            }
            option.Partial = true;

            var count = 0;

            foreach (var item in tables)
            {
                // 跳过排除项
                if (option.Excludes.Contains(item.Name))
                {
                    continue;
                }
                if (option.Excludes.Contains(item.TableName))
                {
                    continue;
                }

                var builder = new EntityBuilder
                {
                    AllTables = tables,
                    Option    = option.Clone(),
                };

                builder.Load(item);

                builder.Execute();
                builder.Save(null, true, chineseFileName);

                builder.Business = true;
                builder.Execute();
                builder.Save(null, false, chineseFileName);

                count++;
            }

            return(count);
        }
示例#5
0
        public static Int32 Build(String xmlFile = null, String output = null, String nameSpace = null, String connName = null, Boolean?chineseFileName = null)
        {
            var option = new BuilderOption
            {
                Output    = output,
                Namespace = nameSpace,
                ConnName  = connName,
                Partial   = true,
            };

            var tables = ClassBuilder.LoadModels(xmlFile, option, out var atts);

            FixModelFile(xmlFile, option, atts, tables);

            return(BuildTables(tables, option, chineseFileName ?? true));
        }
示例#6
0
        /// <summary>生成简易版模型</summary>
        /// <param name="tables">表集合</param>
        /// <param name="option">可选项</param>
        /// <returns></returns>
        public static Int32 BuildModels(IList <IDataTable> tables, BuilderOption option = null)
        {
            if (option == null)
            {
                option = new BuilderOption();
            }
            else
            {
                option = option.Clone();
            }

            option.Pure = true;

            var count = 0;

            foreach (var item in tables)
            {
                // 跳过排除项
                if (option.Excludes.Contains(item.Name))
                {
                    continue;
                }
                if (option.Excludes.Contains(item.TableName))
                {
                    continue;
                }

                var builder = new ClassBuilder
                {
                    Table  = item,
                    Option = option.Clone(),
                };
                builder.Execute();
                builder.Save(null, true, false);

                count++;
            }

            return(count);
        }
示例#7
0
        /// <summary>修正模型文件</summary>
        /// <param name="xmlFile"></param>
        /// <param name="option"></param>
        /// <param name="atts"></param>
        /// <param name="tables"></param>
        public static void FixModelFile(String xmlFile, BuilderOption option, IDictionary <String, String> atts, IList <IDataTable> tables)
        {
            // 保存文件名
            if (xmlFile.IsNullOrEmpty())
            {
                xmlFile = atts["ModelFile"];
            }

            // 反哺。确保输出空特性
            atts["Output"]    = option.Output + "";
            atts["NameSpace"] = option.Namespace + "";
            atts["ConnName"]  = option.ConnName + "";
            atts["BaseClass"] = option.BaseClass + "";
            atts.Remove("NameIgnoreCase");
            atts.Remove("IgnoreNameCase");
            atts.Remove("ChineseFileName");
            atts.Remove("ModelFile");
            atts.Remove("RenderGenEntity");

            foreach (var item in tables)
            {
                item.Properties.Remove("RenderGenEntity");
            }

            // 格式化处理字段名
            if (Enum.TryParse(typeof(NameFormats), atts["NameFormat"], true, out var obj) && obj is NameFormats format && format > NameFormats.Default)
            {
                XTrace.WriteLine("处理表名字段名为:{0}", format);

                var resolve = ModelResolver.Current;
                foreach (var dt in tables)
                {
                    if (dt.TableName.IsNullOrEmpty() || dt.TableName == dt.Name)
                    {
                        dt.TableName = resolve.GetDbName(dt.Name, format);
                    }

                    foreach (var col in dt.Columns)
                    {
                        if (col.ColumnName.IsNullOrEmpty() || col.ColumnName == col.Name)
                        {
                            col.ColumnName = resolve.GetDbName(col.Name, format);
                        }
                    }
                }
            }

            // 更新xsd
            atts["xmlns"]             = atts["xmlns"].Replace("ModelSchema", "Model2022").Replace("Model2020", "Model2022");
            atts["xs:schemaLocation"] = atts["xs:schemaLocation"].Replace("ModelSchema", "Model2022").Replace("Model2020", "Model2022");

            // 版本和教程
            var asm = AssemblyX.Create(Assembly.GetExecutingAssembly());

            if (!atts.ContainsKey("Version"))
            {
                atts["Version"] = asm.FileVersion + "";
            }
            if (!atts.ContainsKey("Document"))
            {
                atts["Document"] = "https://www.yuque.com/smartstone/xcode/model";
            }

            // 保存模型文件
            var xmlContent = File.ReadAllText(xmlFile);
            var xml2       = ModelHelper.ToXml(tables, atts);

            if (xmlContent != xml2)
            {
                if (Debug)
                {
                    XTrace.WriteLine("修正模型:{0}", xmlFile);
                }

                File.WriteAllText(xmlFile, xml2);
            }
        }
示例#8
0
        /// <summary>为Xml模型文件生成实体类</summary>
        /// <param name="tables">模型文件</param>
        /// <param name="option">生成可选项</param>
        /// <param name="chineseFileName">是否中文名称</param>
        public static Int32 BuildTables(IList <IDataTable> tables, BuilderOption option, Boolean chineseFileName = true)
        {
            if (tables == null || tables.Count == 0)
            {
                return(0);
            }

            if (option == null)
            {
                option = new BuilderOption();
            }
            else
            {
                option = option.Clone();
            }
            option.Partial = true;

            if (Debug)
            {
                var output = option.Output;
                if (output.IsNullOrEmpty())
                {
                    output = ".";
                }
                XTrace.WriteLine("生成实体类 {0}", output.GetBasePath());
            }

            var count = 0;

            foreach (var item in tables)
            {
                // 跳过排除项
                if (option.Excludes.Contains(item.Name))
                {
                    continue;
                }
                if (option.Excludes.Contains(item.TableName))
                {
                    continue;
                }

                var builder = new EntityBuilder
                {
                    AllTables = tables,
                    Option    = option.Clone(),
                };
                if (Debug)
                {
                    builder.Log = XTrace.Log;
                }

                builder.Load(item);

                builder.Execute();
                builder.Save(null, true, chineseFileName);

                builder.Business = true;
                builder.Execute();
                builder.Save(null, false, chineseFileName);

                count++;
            }

            return(count);
        }