コード例 #1
0
    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);
        }
    }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }