Skip to content

Commit cf68c6f

Browse files
committed
Merge branch 'Database_Provider'
2 parents f3b9cc4 + 9577cbb commit cf68c6f

File tree

11 files changed

+250
-33
lines changed

11 files changed

+250
-33
lines changed

EntityFramework.Reverse.POCO.Generator/EF.Reverse.POCO.v3.ttinclude

Lines changed: 84 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,42 @@
623623
}
624624
}
625625

626+
public static string DatabaseProvider()
627+
{
628+
switch (DatabaseType)
629+
{
630+
case DatabaseType.PostgreSQL:
631+
return "UseNpgsql";
632+
633+
case DatabaseType.MySql:
634+
return "UseMySql";
635+
636+
case DatabaseType.Oracle:
637+
return "UseOracle";
638+
639+
default:
640+
return "UseSqlServer";
641+
}
642+
}
643+
644+
public static string SqlParameter()
645+
{
646+
switch (DatabaseType)
647+
{
648+
case DatabaseType.PostgreSQL:
649+
return "NpgsqlParameter";
650+
651+
case DatabaseType.MySql:
652+
return "MySqlParameter";
653+
654+
case DatabaseType.Oracle:
655+
return "OracleParameter";
656+
657+
default:
658+
return "SqlParameter";
659+
}
660+
}
661+
626662
public static string Root;
627663
public static string TemplateFile;
628664
public static int FilterCount;
@@ -3378,7 +3414,6 @@
33783414
}
33793415

33803416
var isEfCore3Plus = Settings.IsEfCore3Plus();
3381-
var isEfCore5Plus = Settings.IsEfCore5Plus();
33823417

33833418
var data = new ContextModel
33843419
{
@@ -3421,6 +3456,8 @@
34213456
OnConfigurationUsesConfiguration = Settings.OnConfiguration == OnConfiguration.Configuration,
34223457
OnConfigurationUsesConnectionString = Settings.OnConfiguration == OnConfiguration.ConnectionString,
34233458
DefaultSchema = Settings.DefaultSchema,
3459+
UseDatabaseProvider = Settings.DatabaseProvider(),
3460+
SqlParameter = Settings.SqlParameter(),
34243461
};
34253462

34263463
var co = new CodeOutput(string.Empty, filename, "Database context", _globalUsings);
@@ -15413,7 +15450,7 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
1541315450
var isGeography = p.PropertyType == "DbGeography";
1541415451

1541515452
sb.AppendLine(
15416-
string.Format(" var {0} = new SqlParameter", WriteStoredProcSqlParameterName(p))
15453+
string.Format(" var {0} = new {1}", WriteStoredProcSqlParameterName(p), Settings.SqlParameter())
1541715454
+ string.Format(" {{ ParameterName = \"{0}\", ", p.Name)
1541815455
+ (isGeography ? "UdtTypeName = \"geography\"" : string.Format("SqlDbType = SqlDbType.{0}", p.SqlDbType))
1541915456
+ ", Direction = ParameterDirection."
@@ -15440,8 +15477,9 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
1544015477

1544115478
if (includeProcResult && ReturnModels.Count < 2)
1544215479
{
15443-
sb.AppendLine(
15444-
" var procResultParam = new SqlParameter { ParameterName = \"@procResult\", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output };");
15480+
sb.Append(" var procResultParam = new ");
15481+
sb.Append(Settings.SqlParameter());
15482+
sb.AppendLine(" { ParameterName = \"@procResult\", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output };");
1544515483
}
1544615484

1544715485
return sb.ToString();
@@ -16106,6 +16144,8 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
1610616144
public bool OnConfigurationUsesConfiguration { get; set; }
1610716145
public bool OnConfigurationUsesConnectionString { get; set; }
1610816146
public string DefaultSchema { get; set; }
16147+
public string UseDatabaseProvider { get; set; }
16148+
public string SqlParameter { get; set; }
1610916149
}
1611016150
public class FactoryModel
1611116151
{
@@ -16560,7 +16600,7 @@ using {{this}};{{#newline}}
1656016600
{{#newline}}
1656116601

1656216602

16563-
public bool IsSqlParameterNull(SqlParameter param){{#newline}}
16603+
public bool IsSqlParameterNull({{SqlParameter}} param){{#newline}}
1656416604
{{{#newline}}
1656516605
var sqlValue = param.SqlValue;{{#newline}}
1656616606
var nullableValue = sqlValue as INullable;{{#newline}}
@@ -17832,7 +17872,7 @@ using {{this}};{{#newline}}
1783217872
{{{#newline}}
1783317873
if (!optionsBuilder.IsConfigured && _configuration != null){{#newline}}
1783417874
{{{#newline}}
17835-
optionsBuilder.UseSqlServer(_configuration.GetConnectionString(@""{{ConnectionStringName}}""){{ConnectionStringActions}});{{#newline}}
17875+
optionsBuilder.{{UseDatabaseProvider}}(_configuration.GetConnectionString(@""{{ConnectionStringName}}""){{ConnectionStringActions}});{{#newline}}
1783617876
}{{#newline}}
1783717877
}{{#newline}}{{#newline}}
1783817878
{{/if}}
@@ -17842,13 +17882,13 @@ using {{this}};{{#newline}}
1784217882
{{{#newline}}
1784317883
if (!optionsBuilder.IsConfigured){{#newline}}
1784417884
{{{#newline}}
17845-
optionsBuilder.UseSqlServer(@""{{ConnectionString}}""{{ConnectionStringActions}});{{#newline}}
17885+
optionsBuilder.{{UseDatabaseProvider}}(@""{{ConnectionString}}""{{ConnectionStringActions}});{{#newline}}
1784617886
}{{#newline}}
1784717887
}{{#newline}}{{#newline}}
1784817888
{{/if}}
1784917889

1785017890

17851-
public bool IsSqlParameterNull(SqlParameter param){{#newline}}
17891+
public bool IsSqlParameterNull({{SqlParameter}} param){{#newline}}
1785217892
{{{#newline}}
1785317893
var sqlValue = param.SqlValue;{{#newline}}
1785417894
var nullableValue = sqlValue as INullable;{{#newline}}
@@ -19109,12 +19149,26 @@ using {{this}};{{#newline}}
1910919149
{
1911019150
"System",
1911119151
"System.Data",
19112-
"Microsoft.Data.SqlClient",
1911319152
"System.Data.SqlTypes",
1911419153
"Microsoft.EntityFrameworkCore",
1911519154
"System.Threading.Tasks",
1911619155
"System.Threading"
1911719156
};
19157+
19158+
switch(Settings.DatabaseType)
19159+
{
19160+
case DatabaseType.SqlServer:
19161+
case DatabaseType.SqlCe:
19162+
case DatabaseType.Plugin:
19163+
usings.Add("Microsoft.Data.SqlClient");
19164+
break;
19165+
case DatabaseType.PostgreSQL:
19166+
break;
19167+
case DatabaseType.MySql:
19168+
break;
19169+
case DatabaseType.Oracle:
19170+
break;
19171+
}
1911819172

1911919173
if (Settings.IncludeCodeGeneratedAttribute)
1912019174
usings.Add("System.CodeDom.Compiler");
@@ -19185,7 +19239,7 @@ using {{this}};{{#newline}}
1918519239
{{{#newline}}
1918619240
if (!optionsBuilder.IsConfigured && _configuration != null){{#newline}}
1918719241
{{{#newline}}
19188-
optionsBuilder.UseSqlServer(_configuration.GetConnectionString(@""{{ConnectionStringName}}""){{ConnectionStringActions}});{{#newline}}
19242+
optionsBuilder.{{UseDatabaseProvider}}(_configuration.GetConnectionString(@""{{ConnectionStringName}}""){{ConnectionStringActions}});{{#newline}}
1918919243
}{{#newline}}
1919019244
}{{#newline}}{{#newline}}
1919119245
{{/if}}
@@ -19195,13 +19249,13 @@ using {{this}};{{#newline}}
1919519249
{{{#newline}}
1919619250
if (!optionsBuilder.IsConfigured){{#newline}}
1919719251
{{{#newline}}
19198-
optionsBuilder.UseSqlServer(@""{{ConnectionString}}""{{ConnectionStringActions}});{{#newline}}
19252+
optionsBuilder.{{UseDatabaseProvider}}(@""{{ConnectionString}}""{{ConnectionStringActions}});{{#newline}}
1919919253
}{{#newline}}
1920019254
}{{#newline}}{{#newline}}
1920119255
{{/if}}
1920219256

1920319257

19204-
public bool IsSqlParameterNull(SqlParameter param){{#newline}}
19258+
public bool IsSqlParameterNull({{SqlParameter}} param){{#newline}}
1920519259
{{{#newline}}
1920619260
var sqlValue = param.SqlValue;{{#newline}}
1920719261
var nullableValue = sqlValue as INullable;{{#newline}}
@@ -20572,13 +20626,27 @@ using {{this}};{{#newline}}
2057220626
{
2057320627
"System",
2057420628
"System.Data",
20575-
"Microsoft.Data.SqlClient",
2057620629
"System.Data.SqlTypes",
2057720630
"Microsoft.EntityFrameworkCore",
2057820631
"System.Threading.Tasks",
2057920632
"System.Threading"
2058020633
};
2058120634

20635+
switch (Settings.DatabaseType)
20636+
{
20637+
case DatabaseType.SqlServer:
20638+
case DatabaseType.SqlCe:
20639+
case DatabaseType.Plugin:
20640+
usings.Add("Microsoft.Data.SqlClient");
20641+
break;
20642+
case DatabaseType.PostgreSQL:
20643+
break;
20644+
case DatabaseType.MySql:
20645+
break;
20646+
case DatabaseType.Oracle:
20647+
break;
20648+
}
20649+
2058220650
if (Settings.IncludeCodeGeneratedAttribute)
2058320651
usings.Add("System.CodeDom.Compiler");
2058420652

@@ -20648,7 +20716,7 @@ using {{this}};{{#newline}}
2064820716
{{{#newline}}
2064920717
if (!optionsBuilder.IsConfigured && _configuration != null){{#newline}}
2065020718
{{{#newline}}
20651-
optionsBuilder.UseSqlServer(_configuration.GetConnectionString(@""{{ConnectionStringName}}""){{ConnectionStringActions}});{{#newline}}
20719+
optionsBuilder.{{UseDatabaseProvider}}(_configuration.GetConnectionString(@""{{ConnectionStringName}}""){{ConnectionStringActions}});{{#newline}}
2065220720
}{{#newline}}
2065320721
}{{#newline}}{{#newline}}
2065420722
{{/if}}
@@ -20658,13 +20726,13 @@ using {{this}};{{#newline}}
2065820726
{{{#newline}}
2065920727
if (!optionsBuilder.IsConfigured){{#newline}}
2066020728
{{{#newline}}
20661-
optionsBuilder.UseSqlServer(@""{{ConnectionString}}""{{ConnectionStringActions}});{{#newline}}
20729+
optionsBuilder.{{UseDatabaseProvider}}(@""{{ConnectionString}}""{{ConnectionStringActions}});{{#newline}}
2066220730
}{{#newline}}
2066320731
}{{#newline}}{{#newline}}
2066420732
{{/if}}
2066520733

2066620734

20667-
public bool IsSqlParameterNull(SqlParameter param){{#newline}}
20735+
public bool IsSqlParameterNull({{SqlParameter}} param){{#newline}}
2066820736
{{{#newline}}
2066920737
var sqlValue = param.SqlValue;{{#newline}}
2067020738
var nullableValue = sqlValue as INullable;{{#newline}}

Generator.Tests.Unit/MultiContextDatabaseReverseEngineerTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public void Run(string filename, Type fileManagerType, string subFolder)
6262
var outer = new GeneratedTextTransformation();
6363
var fileManagement = new FileManagementService(outer);
6464
var generator = GeneratorFactory.Create(fileManagement, fileManagerType);
65+
Assert.IsNotNull(generator);
6566

6667
List<MultiContextSettings> multiDbSettings;
6768
if (string.IsNullOrWhiteSpace(Settings.MultiContextSettingsPlugin))
@@ -74,7 +75,9 @@ public void Run(string filename, Type fileManagerType, string subFolder)
7475
multiDbSettings = plugin.ReadSettings();
7576
}
7677

77-
var keys = generator.FilterList.GetFilters().Select(x => x.Key).ToArray();
78+
var filters = generator.FilterList.GetFilters();
79+
Assert.IsNotNull(filters);
80+
var keys = filters.Select(x => x.Key).ToArray();
7881
_generatedFileNames = keys.Select(x => $"{filename}_{Settings.DatabaseType}_{Settings.TemplateType}_{x}.cs").ToArray();
7982
_generatedFullPaths = _generatedFileNames.Select(x => Path.Combine(path, x)).ToArray();
8083

Generator.Tests.Unit/TestComparison/Northwind_PostgreSQL_EfCore3_FkLegacy.cs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public interface IMyDbContext : IDisposable
3434
DbSet<CustomerAndSuppliersByCity> CustomerAndSuppliersByCities { get; set; } // Customer and Suppliers by City
3535
DbSet<Customercustomerdemo> Customercustomerdemoes { get; set; } // customercustomerdemo
3636
DbSet<Customerdemographic> Customerdemographics { get; set; } // customerdemographics
37+
DbSet<dbo_TableA> dbo_TableAs { get; set; } // TableA
38+
DbSet<dbo_TableB> dbo_TableBs { get; set; } // TableB
3739
DbSet<Employee> Employees { get; set; } // employees
3840
DbSet<Employeeterritory> Employeeterritories { get; set; } // employeeterritories
3941
DbSet<Invoice> Invoices { get; set; } // Invoices
@@ -146,6 +148,8 @@ public MyDbContext(DbContextOptions<MyDbContext> options)
146148
public DbSet<CustomerAndSuppliersByCity> CustomerAndSuppliersByCities { get; set; } // Customer and Suppliers by City
147149
public DbSet<Customercustomerdemo> Customercustomerdemoes { get; set; } // customercustomerdemo
148150
public DbSet<Customerdemographic> Customerdemographics { get; set; } // customerdemographics
151+
public DbSet<dbo_TableA> dbo_TableAs { get; set; } // TableA
152+
public DbSet<dbo_TableB> dbo_TableBs { get; set; } // TableB
149153
public DbSet<Employee> Employees { get; set; } // employees
150154
public DbSet<Employeeterritory> Employeeterritories { get; set; } // employeeterritories
151155
public DbSet<Invoice> Invoices { get; set; } // Invoices
@@ -199,6 +203,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
199203
modelBuilder.ApplyConfiguration(new CustomerAndSuppliersByCityConfiguration());
200204
modelBuilder.ApplyConfiguration(new CustomercustomerdemoConfiguration());
201205
modelBuilder.ApplyConfiguration(new CustomerdemographicConfiguration());
206+
modelBuilder.ApplyConfiguration(new dbo_TableAConfiguration());
207+
modelBuilder.ApplyConfiguration(new dbo_TableBConfiguration());
202208
modelBuilder.ApplyConfiguration(new EmployeeConfiguration());
203209
modelBuilder.ApplyConfiguration(new EmployeeterritoryConfiguration());
204210
modelBuilder.ApplyConfiguration(new InvoiceConfiguration());
@@ -352,6 +358,8 @@ public class FakeMyDbContext : IMyDbContext
352358
public DbSet<CustomerAndSuppliersByCity> CustomerAndSuppliersByCities { get; set; } // Customer and Suppliers by City
353359
public DbSet<Customercustomerdemo> Customercustomerdemoes { get; set; } // customercustomerdemo
354360
public DbSet<Customerdemographic> Customerdemographics { get; set; } // customerdemographics
361+
public DbSet<dbo_TableA> dbo_TableAs { get; set; } // TableA
362+
public DbSet<dbo_TableB> dbo_TableBs { get; set; } // TableB
355363
public DbSet<Employee> Employees { get; set; } // employees
356364
public DbSet<Employeeterritory> Employeeterritories { get; set; } // employeeterritories
357365
public DbSet<Invoice> Invoices { get; set; } // Invoices
@@ -388,6 +396,8 @@ public FakeMyDbContext()
388396
CustomerAndSuppliersByCities = new FakeDbSet<CustomerAndSuppliersByCity>();
389397
Customercustomerdemoes = new FakeDbSet<Customercustomerdemo>("CustomerId", "CustomerTypeId");
390398
Customerdemographics = new FakeDbSet<Customerdemographic>("CustomerTypeId");
399+
dbo_TableAs = new FakeDbSet<dbo_TableA>("TableAId");
400+
dbo_TableBs = new FakeDbSet<dbo_TableB>("TableBId", "TableAId");
391401
Employees = new FakeDbSet<Employee>("EmployeeId");
392402
Employeeterritories = new FakeDbSet<Employeeterritory>("EmployeeId", "TerritoryId");
393403
Invoices = new FakeDbSet<Invoice>();
@@ -1149,6 +1159,41 @@ public Customerdemographic()
11491159
}
11501160
}
11511161

1162+
// TableA
1163+
public class dbo_TableA
1164+
{
1165+
public int TableAId { get; set; } // TableAId (Primary key)
1166+
public string TableADesc { get; set; } // TableADesc
1167+
1168+
// Reverse navigation
1169+
1170+
/// <summary>
1171+
/// Child dbo_TableBs where [TableB].[TableAId] point to this entity (FK_TableA_CompositeKey_Req)
1172+
/// </summary>
1173+
public virtual ICollection<dbo_TableB> dbo_TableBs { get; set; } // TableB.FK_TableA_CompositeKey_Req
1174+
1175+
public dbo_TableA()
1176+
{
1177+
dbo_TableBs = new List<dbo_TableB>();
1178+
}
1179+
}
1180+
1181+
// TableB
1182+
public class dbo_TableB
1183+
{
1184+
public int TableBId { get; set; } // TableBId (Primary key)
1185+
public int TableAId { get; set; } // TableAId (Primary key)
1186+
public int? ParentTableAId { get; set; } // ParentTableAId
1187+
public string TableBDesc { get; set; } // TableBDesc
1188+
1189+
// Foreign keys
1190+
1191+
/// <summary>
1192+
/// Parent dbo_TableA pointed by [TableB].([TableAId]) (FK_TableA_CompositeKey_Req)
1193+
/// </summary>
1194+
public virtual dbo_TableA dbo_TableA { get; set; } // FK_TableA_CompositeKey_Req
1195+
}
1196+
11521197
// employees
11531198
public class Employee
11541199
{
@@ -1728,6 +1773,39 @@ public void Configure(EntityTypeBuilder<Customerdemographic> builder)
17281773
}
17291774
}
17301775

1776+
// TableA
1777+
public class dbo_TableAConfiguration : IEntityTypeConfiguration<dbo_TableA>
1778+
{
1779+
public void Configure(EntityTypeBuilder<dbo_TableA> builder)
1780+
{
1781+
builder.ToTable("TableA", "dbo");
1782+
builder.HasKey(x => x.TableAId).HasName("TableA_pkey");
1783+
1784+
builder.Property(x => x.TableAId).HasColumnName(@"TableAId").HasColumnType("integer").IsRequired().ValueGeneratedOnAdd().UseIdentityColumn();
1785+
builder.Property(x => x.TableADesc).HasColumnName(@"TableADesc").HasColumnType("text").IsRequired(false).IsUnicode(false);
1786+
}
1787+
}
1788+
1789+
// TableB
1790+
public class dbo_TableBConfiguration : IEntityTypeConfiguration<dbo_TableB>
1791+
{
1792+
public void Configure(EntityTypeBuilder<dbo_TableB> builder)
1793+
{
1794+
builder.ToTable("TableB", "dbo");
1795+
builder.HasKey(x => new { x.TableBId, x.TableAId }).HasName("TableB_pkey");
1796+
1797+
builder.Property(x => x.TableBId).HasColumnName(@"TableBId").HasColumnType("integer").IsRequired().ValueGeneratedOnAdd().UseIdentityColumn();
1798+
builder.Property(x => x.TableAId).HasColumnName(@"TableAId").HasColumnType("integer").IsRequired().ValueGeneratedNever();
1799+
builder.Property(x => x.ParentTableAId).HasColumnName(@"ParentTableAId").HasColumnType("integer").IsRequired(false);
1800+
builder.Property(x => x.TableBDesc).HasColumnName(@"TableBDesc").HasColumnType("text").IsRequired(false).IsUnicode(false);
1801+
1802+
// Foreign keys
1803+
builder.HasOne(a => a.dbo_TableA).WithMany(b => b.dbo_TableBs).HasForeignKey(c => c.TableAId).HasConstraintName("FK_TableA_CompositeKey_Req");
1804+
1805+
builder.HasIndex(x => x.TableAId).HasName("fki_ParentTableA_FK_Constraint");
1806+
}
1807+
}
1808+
17311809
// employees
17321810
public class EmployeeConfiguration : IEntityTypeConfiguration<Employee>
17331811
{

Generator/Generators/CodeGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,6 @@ public CodeOutput GenerateContext()
293293
}
294294

295295
var isEfCore3Plus = Settings.IsEfCore3Plus();
296-
var isEfCore5Plus = Settings.IsEfCore5Plus();
297296

298297
var data = new ContextModel
299298
{
@@ -336,6 +335,8 @@ public CodeOutput GenerateContext()
336335
OnConfigurationUsesConfiguration = Settings.OnConfiguration == OnConfiguration.Configuration,
337336
OnConfigurationUsesConnectionString = Settings.OnConfiguration == OnConfiguration.ConnectionString,
338337
DefaultSchema = Settings.DefaultSchema,
338+
UseDatabaseProvider = Settings.DatabaseProvider(),
339+
SqlParameter = Settings.SqlParameter(),
339340
};
340341

341342
var co = new CodeOutput(string.Empty, filename, "Database context", _globalUsings);

0 commit comments

Comments
 (0)