mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 增加 FreeSql.Generator -Filter 设置选项,可阻止存储过程+视图的生成;
This commit is contained in:
		@@ -17,6 +17,7 @@ namespace FreeSql.Generator
 | 
				
			|||||||
        string ArgsNameSpace { get; }
 | 
					        string ArgsNameSpace { get; }
 | 
				
			||||||
        DataType ArgsDbType { get; }
 | 
					        DataType ArgsDbType { get; }
 | 
				
			||||||
        string ArgsConnectionString { get; }
 | 
					        string ArgsConnectionString { get; }
 | 
				
			||||||
 | 
					        string ArgsFilter { get; }
 | 
				
			||||||
        string ArgsFileName { get; }
 | 
					        string ArgsFileName { get; }
 | 
				
			||||||
        string ArgsOutput { get; }
 | 
					        string ArgsOutput { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,9 +51,13 @@ namespace FreeSql.Generator
 | 
				
			|||||||
new Colorful.Formatter("https://github.com/2881099/FreeSql", Color.DeepSkyBlue),
 | 
					new Colorful.Formatter("https://github.com/2881099/FreeSql", Color.DeepSkyBlue),
 | 
				
			||||||
new Colorful.Formatter("v" + string.Join(".", typeof(ConsoleApp).Assembly.GetName().Version.ToString().Split('.').Where((a, b) => b <= 2)), Color.SlateGray));
 | 
					new Colorful.Formatter("v" + string.Join(".", typeof(ConsoleApp).Assembly.GetName().Version.ToString().Split('.').Where((a, b) => b <= 2)), Color.SlateGray));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ArgsRazorRaw = "1";
 | 
				
			||||||
 | 
					            ArgsRazor = RazorContentManager.实体类_特性_cshtml;
 | 
				
			||||||
            ArgsNameOptions = new[] { false, false, false, false };
 | 
					            ArgsNameOptions = new[] { false, false, false, false };
 | 
				
			||||||
            ArgsOutput = Directory.GetCurrentDirectory();
 | 
					            ArgsNameSpace = "MyProject";
 | 
				
			||||||
 | 
					            ArgsFilter = "";
 | 
				
			||||||
            ArgsFileName = "{name}.cs";
 | 
					            ArgsFileName = "{name}.cs";
 | 
				
			||||||
 | 
					            ArgsOutput = Directory.GetCurrentDirectory();
 | 
				
			||||||
            string args0 = args[0].Trim().ToLower();
 | 
					            string args0 = args[0].Trim().ToLower();
 | 
				
			||||||
            if (args[0] == "?" || args0 == "--help" || args0 == "-help")
 | 
					            if (args[0] == "?" || args0 == "--help" || args0 == "-help")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -92,6 +97,10 @@ new Colorful.Formatter("v" + string.Join(".", typeof(ConsoleApp).Assembly.GetNam
 | 
				
			|||||||
     -DB ""{10},Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789;Max pool size=2""
 | 
					     -DB ""{10},Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789;Max pool size=2""
 | 
				
			||||||
                               {10} 是国产达梦数据库,需要使用 ODBC 连接
 | 
					                               {10} 是国产达梦数据库,需要使用 ODBC 连接
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     -Filter                   Table+View+StoreProcedure
 | 
				
			||||||
 | 
					                               默认生成:表+视图+存储过程
 | 
				
			||||||
 | 
					                               如果不想生成视图和存储过程 -Fitler View+StoreProcedure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     -FileName                 文件名,默认:{name}.cs
 | 
					     -FileName                 文件名,默认:{name}.cs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     -Output                   保存路径,默认为当前 shell 所在目录
 | 
					     -Output                   保存路径,默认为当前 shell 所在目录
 | 
				
			||||||
@@ -151,7 +160,10 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
                            default: throw new ArgumentException($"-DB 参数错误,不支持的类型:{dbargs[0]}");
 | 
					                            default: throw new ArgumentException($"-DB 参数错误,不支持的类型:{dbargs[0]}");
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        ArgsConnectionString = dbargs[1].Trim();
 | 
					                        ArgsConnectionString = dbargs[1].Trim();
 | 
				
			||||||
                        if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException($"-DB 参数错误,未提供 ConnectionString");
 | 
					                        a++;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case "-Filter":
 | 
				
			||||||
 | 
					                        ArgsFilter = args[a + 1];
 | 
				
			||||||
                        a++;
 | 
					                        a++;
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "-FileName":
 | 
					                    case "-FileName":
 | 
				
			||||||
@@ -165,6 +177,8 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException($"-DB 参数错误,未提供 ConnectionString");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ArgsOutput = ArgsOutput.Trim().TrimEnd('/', '\\');
 | 
					            ArgsOutput = ArgsOutput.Trim().TrimEnd('/', '\\');
 | 
				
			||||||
            ArgsOutput += ArgsOutput.Contains("\\") ? "\\" : "/";
 | 
					            ArgsOutput += ArgsOutput.Contains("\\") ? "\\" : "/";
 | 
				
			||||||
            if (!Directory.Exists(ArgsOutput))
 | 
					            if (!Directory.Exists(ArgsOutput))
 | 
				
			||||||
@@ -191,6 +205,30 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
                //开始生成操作
 | 
					                //开始生成操作
 | 
				
			||||||
                foreach (var table in outputTables)
 | 
					                foreach (var table in outputTables)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					                    switch (table.Type)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        case DatabaseModel.DbTableType.TABLE:
 | 
				
			||||||
 | 
					                            if (ArgsFilter.Contains("Table", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                Console.WriteFormatted(" Ignore Table -> " + table.Name + "\r\n", Color.DarkSlateGray);
 | 
				
			||||||
 | 
					                                continue;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case DatabaseModel.DbTableType.VIEW:
 | 
				
			||||||
 | 
					                            if (ArgsFilter.Contains("View", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                Console.WriteFormatted(" Ignore View -> " + table.Name + "\r\n", Color.DarkSlateGray);
 | 
				
			||||||
 | 
					                                continue;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case DatabaseModel.DbTableType.StoreProcedure:
 | 
				
			||||||
 | 
					                            if (ArgsFilter.Contains("StoreProcedure", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                Console.WriteFormatted(" Ignore StoreProcedure -> " + table.Name + "\r\n", Color.DarkSlateGray);
 | 
				
			||||||
 | 
					                                continue;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    var sw = new StringWriter();
 | 
					                    var sw = new StringWriter();
 | 
				
			||||||
                    var model = new RazorModel(fsql, ArgsNameSpace, ArgsNameOptions, tables, table);
 | 
					                    var model = new RazorModel(fsql, ArgsNameSpace, ArgsNameOptions, tables, table);
 | 
				
			||||||
                    RazorEngine.Engine.Razor.Run(razorId, sw, null, model);
 | 
					                    RazorEngine.Engine.Razor.Run(razorId, sw, null, model);
 | 
				
			||||||
@@ -210,7 +248,18 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    var outputFile = $"{ArgsOutput}{ArgsFileName.Replace("{name}", model.GetCsName(table.Name))}";
 | 
					                    var outputFile = $"{ArgsOutput}{ArgsFileName.Replace("{name}", model.GetCsName(table.Name))}";
 | 
				
			||||||
                    File.WriteAllText(outputFile, plus.ToString());
 | 
					                    File.WriteAllText(outputFile, plus.ToString());
 | 
				
			||||||
                    Console.WriteFormatted(" OUT -> " + outputFile + "\r\n", Color.DeepSkyBlue);
 | 
					                    switch (table.Type)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        case DatabaseModel.DbTableType.TABLE:
 | 
				
			||||||
 | 
					                            Console.WriteFormatted(" OUT Table -> " + outputFile + "\r\n", Color.DeepSkyBlue);
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case DatabaseModel.DbTableType.VIEW:
 | 
				
			||||||
 | 
					                            Console.WriteFormatted(" OUT View -> " + outputFile + "\r\n", Color.DeepSkyBlue);
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case DatabaseModel.DbTableType.StoreProcedure:
 | 
				
			||||||
 | 
					                            Console.WriteFormatted(" OUT StoreProcedure -> " + outputFile + "\r\n", Color.DeepSkyBlue);
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    ++outputCounter;
 | 
					                    ++outputCounter;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,8 +77,8 @@ namespace @gen.NameSpace {
 | 
				
			|||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static string 实体类_特性_导航属性_cshtml =
 | 
					        public static string 实体类_特性_导航属性_cshtml =
 | 
				
			||||||
        #region 长内容 
 | 
							#region 长内容 
 | 
				
			||||||
            @"@using FreeSql.DatabaseModel;@{
 | 
								@"@using FreeSql.DatabaseModel;@{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var isLazying = true; //延时加载
 | 
					var isLazying = true; //延时加载
 | 
				
			||||||
var isOneToMany = true; //一对多,集合属性
 | 
					var isOneToMany = true; //一对多,集合属性
 | 
				
			||||||
@@ -108,7 +108,7 @@ Func<DbForeignInfo, string> GetFkObjectNameOutside = fkx => {
 | 
				
			|||||||
	if (fkretname.EndsWith(fkx.ReferencedColumns[0].Name, StringComparison.CurrentCultureIgnoreCase)) fkretname = fkretname.Substring(0, fkretname.Length - fkx.ReferencedColumns[0].Name.Length).TrimEnd('_');
 | 
						if (fkretname.EndsWith(fkx.ReferencedColumns[0].Name, StringComparison.CurrentCultureIgnoreCase)) fkretname = fkretname.Substring(0, fkretname.Length - fkx.ReferencedColumns[0].Name.Length).TrimEnd('_');
 | 
				
			||||||
	if (fkretname.EndsWith(fkx.ReferencedTable.Name, StringComparison.CurrentCultureIgnoreCase)) fkretname = fkretname.Substring(0, fkretname.Length - fkx.ReferencedTable.Name.Length).TrimEnd('_');
 | 
						if (fkretname.EndsWith(fkx.ReferencedTable.Name, StringComparison.CurrentCultureIgnoreCase)) fkretname = fkretname.Substring(0, fkretname.Length - fkx.ReferencedTable.Name.Length).TrimEnd('_');
 | 
				
			||||||
	if (fkretname.StartsWith(fkx.ReferencedTable.Name, StringComparison.CurrentCultureIgnoreCase)) fkretname = fkretname.Substring(fkx.ReferencedTable.Name.Length).TrimStart('_');
 | 
						if (fkretname.StartsWith(fkx.ReferencedTable.Name, StringComparison.CurrentCultureIgnoreCase)) fkretname = fkretname.Substring(fkx.ReferencedTable.Name.Length).TrimStart('_');
 | 
				
			||||||
	return fkx.Table.Name + ""s"";
 | 
						return fkx.Table.Name + (string.IsNullOrEmpty(fkretname) ? """" : (""_"" + fkretname));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
}@{
 | 
					}@{
 | 
				
			||||||
switch (gen.fsql.Ado.DataType) {
 | 
					switch (gen.fsql.Ado.DataType) {
 | 
				
			||||||
@@ -179,7 +179,7 @@ namespace @gen.NameSpace {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
@:
 | 
					@:
 | 
				
			||||||
		@:[Navigate(""@string.Join("", "", fk.Columns.Select(a => gen.GetCsName(a.Name)))"")]
 | 
							@:[Navigate(""@string.Join("", "", fk.Columns.Select(a => gen.GetCsName(a.Name)))"")]
 | 
				
			||||||
		@:public@(isLazying ? "" virtual"" : """") @gen.GetCsName(fkTableName) @GetFkObjectName(fk) { get; set; }
 | 
							@:public@(isLazying ? "" virtual"" : """") @gen.GetCsName(fkTableName) @gen.GetCsName(GetFkObjectName(fk)) { get; set; }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@:
 | 
					@:
 | 
				
			||||||
		@:#endregion
 | 
							@:#endregion
 | 
				
			||||||
@@ -197,7 +197,7 @@ namespace @gen.NameSpace {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
@:
 | 
					@:
 | 
				
			||||||
		@:[Navigate(""@string.Join("", "", fk.Columns.Select(a => gen.GetCsName(a.Name)))"")]
 | 
							@:[Navigate(""@string.Join("", "", fk.Columns.Select(a => gen.GetCsName(a.Name)))"")]
 | 
				
			||||||
		@:public@(isLazying ? "" virtual"" : """") List<@gen.GetCsName(fkTableName)> @GetFkObjectNameOutside(fk)s { get; set; }
 | 
							@:public@(isLazying ? "" virtual"" : """") List<@gen.GetCsName(fkTableName)> @gen.GetCsName(GetFkObjectNameOutside(fk))s { get; set; }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@:
 | 
					@:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user