public static void Write(OutputModel outputModel, DatabasePlan databasePlan) { var s = $@" namespace {databasePlan.Namespace}; public class {databasePlan.PartitionsClassName} {{ protected virtual {databasePlan.Namespace}.{databasePlan.DbClassName} {databasePlan.DbClassName} {{ get; }} = default!; /// <summary>Mocking constructor</summary> protected {databasePlan.PartitionsClassName}() {{ }} internal protected {databasePlan.PartitionsClassName}({databasePlan.Namespace}.{databasePlan.DbClassName} {databasePlan.DbClassNameArgument}) {{ this.{databasePlan.DbClassName} = {databasePlan.DbClassNameArgument} ?? throw new System.ArgumentNullException(nameof({databasePlan.DbClassNameArgument})); }} {string.Concat(databasePlan.PartitionPlansByName.Values.Select(x => Partition(databasePlan, x)))} }} "; outputModel.Context.AddSource($"db_{databasePlan.PartitionsClassName}.cs", s); foreach (var partition in databasePlan.PartitionPlansByName.Values) { PartitionWriter.Write(outputModel, databasePlan, partition); } }
private GenerateResult ProcessPartitionCodeFile(PartitionDefinition part, TemplateHost host, object schema, object profile, TemplateOption option, string content) { if (host.Errors.HasErrors) { var sb = new StringBuilder(); sb.AppendLine("生成 " + (schema ?? "全局") + " 的 " + part.Name + " 时出错。"); foreach (CompilerError error in host.Errors) { sb.AppendLine(error.ErrorText); } Console.WriteLine(sb.ToString()); MessageBoxHelper.ShowError(sb.ToString()); return(null); } else { var result = new GenerateResult(part, content); if (option.WriteToDisk && result.WriteToDisk) { PartitionWriter.Write(result, schema, profile, option.OutputDirectory); } return(result); } }
private GenerateResult ProcessPartitionCodeFile(PartitionDefinition part, object schema, object profile, TemplateOption option, string content) { var result = new GenerateResult(part, content); if (option.WriteToDisk && result.WriteToDisk) { PartitionWriter.Write(result, schema, profile, option.OutputDirectory); } return(result); }
private List <GenerateResult> GenerateInternal(TemplateOption option, List <Table> tables, CodeGenerateHandler handler) { var result = new List <GenerateResult>(); var references = new List <Reference>(); foreach (var table in tables) { references.AddRange(table.ForeignKeys); } var tparts = option.Partitions.Where(s => s.Loop == PartitionLoop.Tables).ToList(); var nparts = option.Partitions.Where(s => s.Loop == PartitionLoop.None).ToList(); var engine = new VelocityEngine(); foreach (var table in tables) { var context = new VelocityContext(); context.Put("Tables", tables); context.Put("References", references); context.Put("Current", table); context.Put("Profile", option.Profile); foreach (var part in option.Partitions) { var props = new ExtendedProperties(); var info = new FileInfo(part.FilePath); props.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file"); props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, info.DirectoryName); props.AddProperty(RuntimeConstants.COUNTER_INITIAL_VALUE, "0"); engine.Init(props); using (var writer = new StringWriter()) { engine.MergeTemplate(info.Name, "gb2312", context, writer); var r = new GenerateResult(part, writer.ToString()); if (option.WriteToDisk && r.WriteToDisk) { PartitionWriter.Write(r, table, option.Profile, option.OutputDirectory); } result.Add(r); } } } return(result); }