Beispiel #1
0
        public void GenerateMapping()
        {
            var    contextName   = $"{ Config.ProjectName }DbContext";
            string _startup_file = Path.Combine(Config.OutputDir, $"{contextName}.cs");

            using (StreamWriter writer = new StreamWriter(File.Create(_startup_file), System.Text.Encoding.UTF8))
            {
                writer.WriteLine($"using {Config.ProjectName}.Model;");
                writer.WriteLine("using System;");
                writer.WriteLine("using MyStaging.Core;");
                writer.WriteLine("using MyStaging.Common;");
                writer.WriteLine("using MyStaging.MetaData;");
                writer.WriteLine("using Newtonsoft.Json.Linq;");
                writer.WriteLine();
                writer.WriteLine($"namespace {Config.ProjectName}");
                writer.WriteLine("{");
                writer.WriteLine($"\tpublic partial class {contextName} : DbContext");
                writer.WriteLine("\t{");
                writer.WriteLine($"\t\tpublic {contextName}(StagingOptions options) : base(options, ProviderType.MySql)");
                writer.WriteLine("\t\t{");
                writer.WriteLine("\t\t}");
                writer.WriteLine();

                foreach (var table in Tables)
                {
                    var tableName = MyStagingUtils.ToUpperPascal(table.Name);
                    writer.WriteLine($"\t\tpublic DbSet<{tableName}> {tableName} {{ get; set; }}");
                }

                writer.WriteLine("\t}"); // class end
                writer.WriteLine("}");   // namespace end
            }
        }
Beispiel #2
0
        public void ToUpperPascal()
        {
            var field = "Name";
            var cast  = MyStagingUtils.ToUpperPascal("name");

            Assert.Equal(field, cast);
        }
Beispiel #3
0
        public void Create()
        {
            string _classname = MyStagingUtils.ToUpperPascal(this.table.Name);
            string _fileName  = $"{config.ModelPath}/{_classname}.cs";

            using StreamWriter writer = new StreamWriter(File.Create(_fileName), System.Text.Encoding.UTF8);
            writer.WriteLine("using System;");
            writer.WriteLine("using System.Linq;");
            writer.WriteLine("using Newtonsoft.Json;");
            writer.WriteLine("using Newtonsoft.Json.Linq;");
            writer.WriteLine("using MySql.Data.Types;");
            writer.WriteLine("using System.ComponentModel.DataAnnotations.Schema;");
            writer.WriteLine("using System.ComponentModel.DataAnnotations;");
            writer.WriteLine("using MyStaging.DataAnnotations;");
            writer.WriteLine();
            writer.WriteLine($"namespace {config.ProjectName}.Model");
            writer.WriteLine("{");
            writer.WriteLine($"\t[Table(name: \"{this.table.Name}\", Schema = \"{table.Schema}\")]");
            writer.WriteLine($"\tpublic partial class {_classname}");
            writer.WriteLine("\t{");

            foreach (var fi in table.Fields)
            {
                if (!string.IsNullOrEmpty(fi.Comment))
                {
                    writer.WriteLine("\t\t/// <summary>");
                    writer.WriteLine($"\t\t/// {fi.Comment}");
                    writer.WriteLine("\t\t/// </summary>");
                }

                var autoincrement = fi.AutoIncrement ? "(AutoIncrement = true)" : "";

                if (fi.PrimaryKey)
                {
                    writer.WriteLine($"\t\t[PrimaryKey{autoincrement}]");
                }
                if (fi.NotNull && fi.RelType == "string" && !fi.PrimaryKey)
                {
                    writer.WriteLine("\t\t[Required]");
                }
                if (!string.IsNullOrEmpty(fi.DbTypeFull))
                {
                    writer.WriteLine($"\t\t[Column(TypeName = \"{fi.DbTypeFull}\")]");
                }

                writer.WriteLine($"\t\tpublic {fi.RelType} {fi.Name} {{ get; set; }}");
            }

            writer.WriteLine("\t}");
            writer.WriteLine("}");
            writer.Flush();
        }
Beispiel #4
0
        private string CreateName(string separator = "")
        {
            var    tableName = MyStagingUtils.ToUpperPascal(table.Name);
            string className;

            if (table.Schema == "public")
            {
                className = tableName;
            }
            else
            {
                className = $"{MyStagingUtils.ToUpperPascal(table.Schema)}{separator}{tableName}";
            }

            return(className);
        }
Beispiel #5
0
        public void GenerateMapping()
        {
            string _sqltext = @"
select a.oid,a.typname,b.nspname from pg_type a 
INNER JOIN pg_namespace b on a.typnamespace = b.oid 
where a.typtype = 'e' order by oid asc";

            List <EnumTypeInfo> enums = new List <EnumTypeInfo>();

            dbContext.Execute.ExecuteDataReader(dr =>
            {
                enums.Add(new EnumTypeInfo()
                {
                    Oid      = Convert.ToInt32(dr["oid"]),
                    TypeName = dr["typname"].ToString(),
                    NspName  = dr["nspname"].ToString()
                });
            }, System.Data.CommandType.Text, _sqltext);

            if (enums.Count > 0)
            {
                string _fileName = Path.Combine(Config.ModelPath, "_Enums.cs");
                using StreamWriter writer = new StreamWriter(File.Create(_fileName), System.Text.Encoding.UTF8);
                writer.WriteLine("using System;");
                writer.WriteLine();
                writer.WriteLine($"namespace {Config.ProjectName}.Model");
                writer.WriteLine("{");

                for (int i = 0; i < enums.Count; i++)
                {
                    var item = enums[i];
                    writer.WriteLine($"\tpublic enum {item.TypeName}");
                    writer.WriteLine("\t{");
                    string sql = $"select oid,enumlabel from pg_enum WHERE enumtypid = {item.Oid} ORDER BY oid asc";
                    dbContext.Execute.ExecuteDataReader(dr =>
                    {
                        string c = i < enums.Count ? "," : "";
                        writer.WriteLine($"\t\t{dr["enumlabel"]}{c}");
                    }, CommandType.Text, sql);
                    writer.WriteLine("\t}");
                }
                writer.WriteLine("}");
            }

            var    contextName   = $"{ Config.ProjectName }DbContext";
            string _startup_file = Path.Combine(Config.OutputDir, $"{contextName}.cs");

            using (StreamWriter writer = new StreamWriter(File.Create(_startup_file), System.Text.Encoding.UTF8))
            {
                writer.WriteLine($"using {Config.ProjectName}.Model;");
                writer.WriteLine("using System;");
                writer.WriteLine("using Npgsql;");
                writer.WriteLine("using MyStaging.Core;");
                writer.WriteLine("using MyStaging.Common;");
                writer.WriteLine("using MyStaging.MetaData;");
                writer.WriteLine("using Newtonsoft.Json.Linq;");
                writer.WriteLine();
                writer.WriteLine($"namespace {Config.ProjectName}");
                writer.WriteLine("{");
                writer.WriteLine($"\tpublic partial class {contextName} : DbContext");
                writer.WriteLine("\t{");
                writer.WriteLine($"\t\tpublic {contextName}(StagingOptions options) : base(options, ProviderType.PostgreSQL)");
                writer.WriteLine("\t\t{");
                writer.WriteLine("\t\t}");
                writer.WriteLine();
                writer.WriteLine($"\t\tstatic {contextName}()");
                writer.WriteLine("\t\t{");
                writer.WriteLine("\t\t\tType[] jsonTypes = { typeof(JToken), typeof(JObject), typeof(JArray) };");
                writer.WriteLine("\t\t\tNpgsqlNameTranslator translator = new NpgsqlNameTranslator();");
                writer.WriteLine("\t\t\tNpgsqlConnection.GlobalTypeMapper.UseJsonNet(jsonTypes);");

                foreach (var table in Tables)
                {
                    if (table.Name == "geometry_columns")
                    {
                        writer.WriteLine($"\t\t\tNpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();");
                        break;
                    }
                }

                if (enums.Count > 0)
                {
                    writer.WriteLine();
                    foreach (var item in enums)
                    {
                        writer.WriteLine($"\t\t\tNpgsqlConnection.GlobalTypeMapper.MapEnum<{item.TypeName}>(\"{item.NspName}.{item.TypeName}\", translator);");
                    }
                }

                writer.WriteLine("\t\t}"); // InitializerMapping end
                writer.WriteLine();

                foreach (var table in Tables)
                {
                    var tableName = MyStagingUtils.ToUpperPascal(table.Name);
                    writer.WriteLine($"\t\tpublic DbSet<{tableName}> {tableName} {{ get; set; }}");
                }

                writer.WriteLine("\t}"); // class end
                writer.WriteLine("\tpublic partial class NpgsqlNameTranslator : INpgsqlNameTranslator");
                writer.WriteLine("\t{");
                writer.WriteLine("\t\tpublic string TranslateMemberName(string clrName) => clrName;");
                writer.WriteLine("\t\tpublic string TranslateTypeName(string clrTypeName) => clrTypeName;");
                writer.WriteLine("\t}");
                writer.WriteLine("}"); // namespace end
            }
        }