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 } }
public void ToUpperPascal() { var field = "Name"; var cast = MyStagingUtils.ToUpperPascal("name"); Assert.Equal(field, cast); }
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(); }
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); }
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 } }