diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs
index 27b1420..279b885 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs
@@ -1,10 +1,9 @@
using Dapper_Layers_Generator.Core.Converters;
using Dapper_Layers_Generator.Core.Settings;
-using System.Text;
namespace Dapper_Layers_Generator.Core.Generators
{
- public abstract class GeneratorContextForProvider : GeneratorContextTemplate
+ public abstract class GeneratorContextForProvider : GeneratorContextTemplate
{
protected abstract string UsingDbProviderSpecific { get; init; }
protected abstract string DbProviderString { get; init; }
@@ -23,45 +22,108 @@ public GeneratorContextForProvider(SettingsGlobal settingsGlobal
public override string Generate()
{
- var builder = new StringBuilder();
- //Header
- builder.Append(WriteContextHeaderComment());
-
- //Db context class
- builder.Append(WriteFullClassContent());
+ return
+ $"""
+ {WriteUsingStatements()}
+ {WriteContextHeaderComment()}
+ {WriteFullClassContent()}
+ """;
+ }
- return builder.ToString();
+ protected override string WriteUsingStatements()
+ {
+ return
+ $"""
+ using {_settings.TargetNamespaceForRepo};
+ using System.Data;
+ {UsingDbProviderSpecific}
+ using Dapper;
+ using Microsoft.Extensions.Configuration;
+
+ """;
}
protected override string WriteContextHeaderComment()
{
- return $@"{@WriteUsingStatements()}
-// =================================================================
-// DBContext implements all repo management + a small context factory
-// Inherits from DbContext base abstract class
-// Specific for DB provider {DbProviderString}
-// Author: {_settings.AuthorName}
-// Context name: {_settings.DbContextClassName}
-// Generated: {DateTime.Now}
-// WARNING: Never change this file manually (re-generate it)
-// =================================================================
-
-namespace {_settings.TargetNamespaceForDbContext}
-{{";
-
+ return
+ $$"""
+ // =================================================================
+ // DBContext implements all repo management + a small context factory
+ // Inherits from DbContext base abstract class
+ // Specific for DB provider {{DbProviderString}}
+ // Author: {{_settings.AuthorName}}
+ // Context name: {{_settings.DbContextClassName}}
+ // Generated: {{_settings.GenerationTimestamp.ToString("yyyy-MM-dd HH:mm:ss")}} UTC
+ // WARNING: Never change this file manually (re-generate it)
+ // =================================================================
+
+ namespace {{_settings.TargetNamespaceForDbContext}}
+ {
+ """;
}
- protected override string WriteUsingStatements()
+ protected override string WriteFullClassContent()
{
- string output = $@"using {_settings.TargetNamespaceForRepo};
-using System.Data;
-{UsingDbProviderSpecific}
-using Dapper;
-using Microsoft.Extensions.Configuration;
-
-";
-
- return output;
+ return
+ $$"""
+ {{tab}}///
+ {{tab}}/// Used when the DBcontext itself is not suffisent to manage its lifecycle
+ {{tab}}/// Factory specific for the dbprovider {{DbProviderString}}
+ {{tab}}/// Inherits from factory base
+ {{tab}}///
+ {{tab}}public class {{_settings.DbContextClassName}}{{DbProviderString}}Factory : {{_settings.DbContextClassName}}FactoryBase, {{("I" + _settings.DbContextClassName)}}Factory
+ {{tab}}{
+ {{tab}}{{tab}}public {{_settings.DbContextClassName}}{{DbProviderString}}Factory(IConfiguration config) : base (config)
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}}
+ {{tab}}{{tab}}
+ {{tab}}{{tab}}public override I{{_settings.DbContextClassName}} Create()
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}return new {{_settings.DbContextClassName}}{{DbProviderString}}(_config);
+ {{tab}}{{tab}}}
+ {{tab}}}
+
+ {{tab}}///
+ {{tab}}/// Used when the DBcontext
+ {{tab}}/// Specific for the dbprovider {{DbProviderString}}
+ {{tab}}/// Inherits from {{_settings.DbContextClassName}}Base
+ {{tab}}///
+ {{tab}}public class {{_settings.DbContextClassName}}{{DbProviderString}} : {{_settings.DbContextClassName}}Base, {{("I" + _settings.DbContextClassName)}}
+ {{tab}}{
+ {{tab}}{{tab}}public override IDbConnection Connection {get;init;}
+ {{tab}}{{tab}}
+ {{@WriteClassRepoMembers()}}
+
+ {{tab}}{{tab}}///
+ {{tab}}{{tab}}/// Main constructor, inject standard config : Default connection string
+ {{tab}}{{tab}}///
+ {{tab}}{{tab}}public {{_settings.DbContextClassName}}{{DbProviderString}}(IConfiguration config) : base (config)
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{DapperDefaultMapStrat}}
+ {{tab}}{{tab}}{{tab}}{{DapperCommandTimeOut}}
+ {{tab}}{{tab}}{{tab}}{{ConnectionStringInject}}
+ {{tab}}{{tab}}}
+
+ {{tab}}{{tab}}///
+ {{tab}}{{tab}}/// Open a transaction with a specified isolation level
+ {{tab}}{{tab}}///
+ {{tab}}{{tab}}public override async Task OpenTransactionAsync(IsolationLevel? level = null)
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}if(_trans != null)
+ {{tab}}{{tab}}{{tab}}{{tab}}throw new Exception("A transaction is already open, you need to use a new {{_settings.DbContextClassName}} for parallel job.");
+ {{tab}}{{tab}}{{tab}}
+ {{tab}}{{tab}}{{tab}}if (Connection.State == ConnectionState.Closed)
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}await (({{ConnectionClassName}})Connection).OpenAsync();
+ {{tab}}{{tab}}{{tab}}}
+ {{tab}}{{tab}}{{tab}}
+ {{tab}}{{tab}}{{tab}}_trans = level == null ? Connection.BeginTransaction() : Connection.BeginTransaction((IsolationLevel)level);
+ {{tab}}{{tab}}{{tab}}
+ {{tab}}{{tab}}{{tab}}return _trans;
+ {{tab}}{{tab}}}
+ {{tab}}}
+ }
+ """;
}
protected override string WriteClassRepoMembers()
{
@@ -74,82 +136,19 @@ protected override string WriteClassRepoMembers()
var repoClassName = tableName + "Repo";
var repoProtectedFieldName = $"_{_stringTransform.FirstCharToLower(repoClassName)}";
- return $@"{tab}{tab}public override {interfaceName} {repoClassName}
-{tab}{tab}{{
-{tab}{tab}{tab}get {{
-{tab}{tab}{tab}{tab}{repoProtectedFieldName} ??= new {repoClassName}{DbProviderString}(this);
-{tab}{tab}{tab}{tab}return {repoProtectedFieldName};
-{tab}{tab}{tab}}}
-{tab}{tab}}}
-";
+ return
+ $$"""
+ {{tab}}{{tab}}public override {{interfaceName}} {{repoClassName}}
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}get {
+ {{tab}}{{tab}}{{tab}}{{tab}}{{repoProtectedFieldName}} ??= new {{repoClassName}}{{DbProviderString}}(this);
+ {{tab}}{{tab}}{{tab}}{{tab}}return {{repoProtectedFieldName}};
+ {{tab}}{{tab}}{{tab}}}
+ {{tab}}{{tab}}}
+ """;
}));
return membersDeclaration;
}
-
- protected override string WriteFullClassContent()
- {
- return $@"
-
-{tab}///
-{tab}/// Used when the DBcontext itself is not suffisent to manage its lifecycle
-{tab}/// Factory specific for the dbprovider {DbProviderString}
-{tab}/// Inherits from factory base
-{tab}///
-{tab}public class {_settings.DbContextClassName}{DbProviderString}Factory : {_settings.DbContextClassName}FactoryBase, {("I" + _settings.DbContextClassName)}Factory
-{tab}{{
-{tab}{tab}public {_settings.DbContextClassName}{DbProviderString}Factory(IConfiguration config) : base (config)
-{tab}{tab}{{
-{tab}{tab}}}
-{tab}{tab}
-{tab}{tab}public override I{_settings.DbContextClassName} Create()
-{tab}{tab}{{
-{tab}{tab}{tab}return new {_settings.DbContextClassName}{DbProviderString}(_config);
-{tab}{tab}}}
-{tab}}}
-{tab}
-{tab}///
-{tab}/// Used when the DBcontext
-{tab}/// Specific for the dbprovider {DbProviderString}
-{tab}/// Inherits from {_settings.DbContextClassName}Base
-{tab}///
-{tab}public class {_settings.DbContextClassName}{DbProviderString} : {_settings.DbContextClassName}Base, {("I" + _settings.DbContextClassName)}
-{tab}{{
-{tab}{tab}public override IDbConnection Connection {{get;init;}}
-{tab}{tab}
-{@WriteClassRepoMembers()}
-{tab}{tab}///
-{tab}{tab}/// Main constructor, inject standard config : Default connection string
-{tab}{tab}///
-{tab}{tab}public {_settings.DbContextClassName}{DbProviderString}(IConfiguration config) : base (config)
-{tab}{tab}{{
-{tab}{tab}{tab}{DapperDefaultMapStrat}
-{tab}{tab}{tab}{DapperCommandTimeOut}
-{tab}{tab}{tab}{ConnectionStringInject}
-{tab}{tab}}}
-{tab}{tab}
-{tab}{tab}///
-{tab}{tab}/// Open a transaction with a specified isolation level
-{tab}{tab}///
-{tab}{tab}public override async Task OpenTransactionAsync(IsolationLevel? level = null)
-{tab}{tab}{{
-{tab}{tab}{tab}if(_trans != null)
-{tab}{tab}{tab}{tab}throw new Exception(""A transaction is already open, you need to use a new {_settings.DbContextClassName} for parallel job."");
-{tab}{tab}{tab}
-{tab}{tab}{tab}if (Connection.State == ConnectionState.Closed)
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}await (({ConnectionClassName})Connection).OpenAsync();
-{tab}{tab}{tab}}}
-{tab}{tab}{tab}
-{tab}{tab}{tab}_trans = level == null ? Connection.BeginTransaction() : Connection.BeginTransaction((IsolationLevel)level);
-{tab}{tab}{tab}
-{tab}{tab}{tab}return _trans;
-{tab}{tab}}}
-{tab}}}
-}}
-";
-
-
- }
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs
index 9e25290..bc9c26b 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs
@@ -15,91 +15,81 @@ public GeneratorForOperations(SettingsGlobal settingsGlobal
}
- protected string GetBaseSqlForSelect(string tableIdentifier = "")
+ protected string WriteBaseSqlForSelect(string tableIdentifier = "")
{
if (ColumnForGetOperations == null || !ColumnForGetOperations.Any())
throw new ArgumentException($"No column available for select for this table{Table.Name}, genererator crash");
- var output = new StringBuilder();
-
- output.Append(@$"{tab}{tab}{tab}var sql = @""
-{tab}{tab}{tab}SELECT {@GetColumnListStringForSelect(tableIdentifier)}");
- output.Append(Environment.NewLine);
- output.Append(@$"{tab}{tab}{tab}FROM {ColAndTableIdentifier + Table.Name + ColAndTableIdentifier} {tableIdentifier.Replace(".","")}");
-
- return output.ToString();
-
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}var sql =
+ {{tab}}{{tab}}{{tab}}"""
+ {{tab}}{{tab}}{{tab}}SELECT {{WriteColumnListStringForSelect(tableIdentifier)}}
+ {{tab}}{{tab}}{{tab}}FROM {{ColAndTableIdentifier + Table.Name + ColAndTableIdentifier}} {{tableIdentifier.Replace(".", "")}}
+ """";
}
//Can maybe be used for BULK
- protected string GetBaseSqlForInsert()
+ protected string WriteBaseSqlForInsert()
{
if (ColumnForInsertOperations == null || !ColumnForInsertOperations.Any())
throw new ArgumentException($"No column available for insert for this table{Table.Name}, genererator crash");
- var output = new StringBuilder();
-
- output.Append(@$"{tab}{tab}{tab}var sql = @""
-{tab}{tab}{tab}INSERT INTO {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier}
-{tab}{tab}{tab}(
-");
- output.Append($"{tab}{tab}{tab}{tab}" + @GetColumnListStringForInsert());
- output.Append($@"
-{tab}{tab}{tab})");
- output.Append(Environment.NewLine);
- output.Append(@$"{tab}{tab}{tab}VALUES
-{tab}{tab}{tab}(
-");
-
- return output.ToString();
-
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}var sql =
+ {{tab}}{{tab}}{{tab}}"""
+ {{tab}}{{tab}}{{tab}}INSERT INTO {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}}
+ {{tab}}{{tab}}{{tab}}(
+ {{tab}}{{tab}}{{tab}}{{tab}}{{@GetColumnListStringForInsert()}}
+ {{tab}}{{tab}}{{tab}})
+ {{tab}}{{tab}}{{tab}}VALUES
+ {{tab}}{{tab}}{{tab}}(
+ """";
}
- protected virtual string GetBaseSqlForDelete()
+ protected virtual string WriteBaseSqlForDelete()
{
- var output = new StringBuilder();
-
- output.Append(@$"{tab}{tab}{tab}var sql = @""
-{tab}{tab}{tab}DELETE FROM {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier}");
-
- return output.ToString();
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}var sql =
+ {{tab}}{{tab}}{{tab}}$"""
+ {{tab}}{{tab}}{{tab}}DELETE FROM {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}}
+ """";
}
- protected virtual string GetValuesToInsert()
+ protected virtual string WriteValuesToInsert()
{
- var output = new StringBuilder();
-
var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement);
var values = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", cols.OrderBy(c => c.Position).Select(col =>
{
- return $@"@{col.Name}";
+ return $"""@{col.Name}""";
}));
-
- output.Append(values);
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab})"";");
- return output.ToString();
+ return
+ $""""
+ {tab}{tab}{tab}{tab}{values}
+ {tab}{tab}{tab})
+ {tab}{tab}{tab}""";
+ """";
}
- protected string GetBaseSqlForUpdate()
+ protected string WriteBaseSqlForUpdate()
{
if (ColumnForUpdateOperations == null || !ColumnForUpdateOperations.Any())
throw new ArgumentException($"No column available for update for this table{Table.Name}, genererator crash");
- var output = new StringBuilder();
-
- output.Append(@$"{tab}{tab}{tab}var sql = @""
-{tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier}
-{tab}{tab}{tab}SET ");
- output.Append(GetColumnListStringForUpdate());
- output.Append(Environment.NewLine);
-
- return output.ToString();
+ return
+ $""""
+ {tab}{tab}{tab}var sql =
+ {tab}{tab}{tab}"""
+ {tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier}
+ {tab}{tab}{tab}SET {WriteColumnListStringForUpdate()}
+ """";
}
- private string GetColumnListStringForUpdate()
+ private string WriteColumnListStringForUpdate()
{
var output = string.Empty;
var cols = ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary);
@@ -108,170 +98,191 @@ private string GetColumnListStringForUpdate()
cols!.OrderBy(c => c.Position).Select(c => $"{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = @{c.Name}"));
}
- protected virtual string GetDapperDynaParamsForPk()
+ protected virtual string WriteDapperDynaParamsForPk()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
-
var spParams = String.Join(Environment.NewLine, PkColumns.Select(col =>
{
return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"",{_stringTransform.ApplyConfigTransformMember(col.Name)});";
}));
- output.Append(spParams);
- return output.ToString();
+ return
+ $"""
+ {tab}{tab}{tab}var p = new DynamicParameters();
+ {spParams}
+ """;
}
- protected virtual string GetDapperDynaParamsForPkList()
+ protected virtual string WriteDapperDynaParamsForPkList()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
+ return
+ $"""
+ {tab}{tab}{tab}var p = new DynamicParameters();
+ {tab}{tab}{tab}p.Add("@listOf",{GetPKMemberNamesStringList()});
+ """;
+ }
- output.Append($@"{tab}{tab}{tab}p.Add(""@listOf"",{GetPKMemberNamesStringList()});");
+ protected virtual string WriteDapperDynaParamsForInsert()
+ {
+ var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement);
- return output.ToString();
- }
+ var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col =>
+ {
+ return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});";
+ }));
+ return
+ $"""
+ {tab}{tab}{tab}var p = new DynamicParameters();
+ {spParams}
+ """;
+ }
- private string GetColumnListStringForSelect(string tableIdentifier = "")
+ private string WriteColumnListStringForSelect(string tableIdentifier = "")
{
- var output = string.Empty;
return String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},",
ColumnForGetOperations!.OrderBy(c => c.Position).Select(c => $"{tableIdentifier}{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}"));
}
private string GetColumnListStringForInsert()
{
- var output = string.Empty;
var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement);
return String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},",
cols!.OrderBy(c => c.Position).Select(c => $"{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}"));
}
- protected virtual string GetSqlWhereClauseForPk()
+ protected virtual string WriteSqlWhereClauseForPk()
{
- var output = new StringBuilder();
-
- output.Append($"{tab}{tab}{tab}WHERE ");
-
var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}AND ", PkColumns.Select(col =>
{
return $"{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier} = @{col.Name}";
}));
-
- output.Append(whereClause + "\";");
- return output.ToString();
-
+
+ return
+ $""""
+ {tab}{tab}{tab}WHERE {whereClause}
+ {tab}{tab}{tab}""";
+ """";
}
- protected virtual string GetSqlPkListWhereClause()
+ protected virtual string WriteSqlPkListWhereClause()
{
- var output = new StringBuilder();
-
- output.Append($"{tab}{tab}{tab}WHERE ");
- output.Append($"{ColAndTableIdentifier}{PkColumns.First().Name}{ColAndTableIdentifier} IN @listOf");
-
- output.Append("\";");
- return output.ToString();
-
+ return
+ $""""
+ {tab}{tab}{tab}WHERE {ColAndTableIdentifier}{PkColumns.First().Name}{ColAndTableIdentifier} IN @listOf
+ {tab}{tab}{tab}""";
+ """";
}
- protected virtual string GetOpenTransAndInitBulkMySql()
+ protected virtual string WriteOpenTransAndInitBulkMySql()
{
+ return
+ $"""
+ {tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null;
+
+ {tab}{tab}{tab}if (!isTransAlreadyOpen)
+ {tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync();
+
+ {tab}{tab}{tab}var bulkCopy = new MySqlBulkCopy((MySqlConnection)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection
+ {tab}{tab}{tab}{tab}, (MySqlTransaction?)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);
+ """;
+ }
- return $@"{tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null;
-
-{tab}{tab}{tab}if (!isTransAlreadyOpen)
-{tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync();
-
-{tab}{tab}{tab}var bulkCopy = new MySqlBulkCopy((MySqlConnection)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection
-{tab}{tab}{tab}{tab}, (MySqlTransaction?)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
-
+ protected virtual string WriteOpenTransactionAndLoopBegin()
+ {
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var isTransAlreadyOpen = _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction != null;
+
+ {{tab}}{{tab}}{{tab}}if (!isTransAlreadyOpen)
+ {{tab}}{{tab}}{{tab}}{{tab}}await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.OpenTransactionAsync();
+
+ {{tab}}{{tab}}{{tab}}foreach(var {{_stringTransform.ApplyConfigTransformMember(ClassName)}} in {{_stringTransform.PluralizeToLower(ClassName)}})
+ {{tab}}{{tab}}{{tab}}{
+ """;
}
- protected virtual string GetCloseTransaction()
+ protected virtual string WriteCloseTransaction()
{
- return $@"{tab}{tab}{tab}if (!isTransAlreadyOpen)
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}_dbContext.CommitTransaction();
-{tab}{tab}{tab}{tab}_dbContext.Connection.Close();
-{tab}{tab}{tab}}}";
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}if (!isTransAlreadyOpen)
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}_dbContext.CommitTransaction();
+ {{tab}}{{tab}}{{tab}}{{tab}}_dbContext.Connection.Close();
+ {{tab}}{{tab}}{{tab}}}
+ """;
}
- protected virtual string GetCreateDataTableForPkMySql(string opCode)
+ protected virtual string WriteCreateDataTableForPkMySql(string opCode)
{
var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var table = new DataTable();" + Environment.NewLine);
-
+
var rowsAdd = new List();
+ var colAdd = new List();
+
var indexItem = 1;
foreach (var colBulk in PkColumns)
{
- output.Append($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));" + Environment.NewLine);
+ colAdd.Add($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));");
rowsAdd.Add($@"{tab}{tab}{tab}{tab}r[""{colBulk.Name}""] = identity{(PkColumns.Count() > 1 ? ".Item" + indexItem : string.Empty)};");
indexItem++;
}
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab}bulkCopy.DestinationTableName = ""tmp_bulk{opCode}_{Table.Name}"";");
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab}bulkCopy.BulkCopyTimeout = 600;");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- output.Append(@$"{tab}{tab}{tab}foreach(var identity in listOf{string.Join("And", PkColumns.Select(c => _stringTransform.ApplyConfigTransformClass(c.Name)))})
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}DataRow r = table.NewRow();");
-
- output.Append(Environment.NewLine);
- output.Append(String.Join(Environment.NewLine, rowsAdd));
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}{tab}table.Rows.Add(r);");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- output.Append($@"{tab}{tab}{tab}List colMappings = new();
-{tab}{tab}{tab}int i = 0;
-{tab}{tab}{tab}foreach (DataColumn col in table.Columns)
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
-{tab}{tab}{tab}{tab}i++;
-{tab}{tab}{tab}}}
-
-{tab}{tab}{tab}bulkCopy.ColumnMappings.AddRange(colMappings);");
-
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var table = new DataTable();
+ {{String.Join(Environment.NewLine, colAdd)}}
+ {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "tmp_bulk{{opCode}}_{{Table.Name}}";
+ {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600;
+
+ {{tab}}{{tab}}{{tab}}foreach(var identity in listOf{{string.Join("And", PkColumns.Select(c => _stringTransform.ApplyConfigTransformClass(c.Name)))}})
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}DataRow r = table.NewRow();
+ {{String.Join(Environment.NewLine, rowsAdd)}}
+ {{tab}}{{tab}}{{tab}}{{tab}}table.Rows.Add(r);
+ {{tab}}{{tab}}{{tab}}}
+
+ {{tab}}{{tab}}{{tab}}List colMappings = new();
+ {{tab}}{{tab}}{{tab}}int i = 0;
+ {{tab}}{{tab}}{{tab}}foreach (DataColumn col in table.Columns)
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ {{tab}}{{tab}}{{tab}}{{tab}}i++;
+ {{tab}}{{tab}}{{tab}}}
+ {{tab}}{{tab}}{{tab}}
+ {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings);
+ """;
}
- protected virtual string GetBulkCallMySql()
+ protected virtual string WriteBulkCallMySql()
{
return $"{tab}{tab}{tab}await bulkCopy.WriteToServerAsync(table);";
}
- protected virtual string GetCreateDbTmpTableForPksMySql(string opCode)
+ protected virtual string WriteCreateDbTmpTableForPksMySql(string opCode)
{
- var output = new StringBuilder();
-
- output.Append($"{tab}{tab}{tab}var sqltmp = @\"CREATE TEMPORARY TABLE " +
- $"{ColAndTableIdentifier}tmp_bulk{opCode}_{Table.Name}{ColAndTableIdentifier} (");
-
//build pk columns
var createColumns = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}, ", PkColumns.Select(c => c.Name + " " + c.CompleteType));
- output.Append(createColumns + ");\";");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
-
- return output.ToString();
+ var functionCall = $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}" +
+ $".Connection.ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
+
+ return
+ $""""
+ {tab}{tab}{tab}var sqltmp =
+ {tab}{tab}{tab}$"""
+ {tab}{tab}{tab}CREATE TEMPORARY TABLE {ColAndTableIdentifier}tmp_bulk{opCode}_{Table.Name}{ColAndTableIdentifier}
+ {tab}{tab}{tab}(
+ {tab}{tab}{tab}{tab}{createColumns}
+ {tab}{tab}{tab});
+ {tab}{tab}{tab}""";
+ {tab}{tab}{tab}
+ {functionCall};
+ """";
}
- protected abstract string GetMethodDef();
- protected abstract string GetDapperCall();
- protected abstract string GetReturnObj();
+ protected abstract string WriteMethodDef();
+ protected abstract string WriteDapperCall();
+ protected abstract string WriteReturnObj();
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs
index 3942ff9..f099c4d 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs
@@ -40,7 +40,7 @@ public GeneratorFromTable(SettingsGlobal settingsGlobal
public override abstract string Generate();
- public virtual void SetTable(string tableName)
+ public void SetTable(string tableName)
{
var table = _currentSchema.Tables?.Where(t => t.Name == tableName).SingleOrDefault();
@@ -74,17 +74,19 @@ public virtual void SetTable(string tableName)
}
}
- ColumnForGetOperations = Table.Columns != null
- ? Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name) && !TableSettings.IgnoredColumnNamesForGet.Split(',').Contains(c.Name))
- : throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash");
+ if(Table.Columns != null)
+ {
+ ColumnForGetOperations = Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',')
+ .Contains(c.Name) && !TableSettings.IgnoredColumnNamesForGet.Split(',').Contains(c.Name));
- ColumnForInsertOperations = Table.Columns != null
- ? Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name) && !TableSettings.IgnoredColumnNamesForAdd.Split(',').Contains(c.Name))
- : throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash");
+ ColumnForInsertOperations = Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',')
+ .Contains(c.Name) && !TableSettings.IgnoredColumnNamesForAdd.Split(',').Contains(c.Name));
- ColumnForUpdateOperations = Table.Columns != null
- ? Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name) && !TableSettings.IgnoredColumnNamesForUpdate.Split(',').Contains(c.Name))
- : throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash");
+ ColumnForUpdateOperations = Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',')
+ .Contains(c.Name) && !TableSettings.IgnoredColumnNamesForUpdate.Split(',').Contains(c.Name));
+ }
+ else
+ throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash");
}
protected string GetPkMemberNamesString()
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs
index 45aed6f..7ff9c6c 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs
@@ -1,7 +1,6 @@
using Dapper_Layers_Generator.Core.Converters;
using Dapper_Layers_Generator.Core.Settings;
using Dapper_Layers_Generator.Data.POCO;
-using System.Text;
namespace Dapper_Layers_Generator.Core.Generators
{
@@ -26,49 +25,39 @@ public override string Generate()
if (Table == null)
throw new NullReferenceException("Cannot use POCO generator without a loaded table (use SetTable)");
-
- string output = WritePocoClass();
-
- return output;
+ return WritePocoClass();
}
- private string WritePocoHeaderComment()
+ private string WritePocoClass()
{
- return $@"#nullable disable warnings
-namespace {_settings.TargetNamespaceForPOCO}
-{{
-{tab}/// =================================================================
-{tab}///
-{tab}/// Poco class for the table {Table.Name}
-{tab}/// Author: {_settings.AuthorName}
-{tab}/// Poco: {ClassName}
-{tab}/// Generated: {DateTime.Now}
-{tab}/// WARNING: Never change this file manually (re-generate it)
-{tab}///
-{tab}/// =================================================================";
-
+ return
+ $$"""
+ {{WritePocoHeaderComment()}}
+ {{tab}}public class {{ClassName}}
+ {{tab}}{
+ {{WritePocoMemberFields()}}
+ {{tab}}}
+ }
+ """;
}
- private string WritePocoClass()
+ private string WritePocoHeaderComment()
{
- var builder = new StringBuilder();
-
- builder.Append(@WritePocoHeaderComment());
-
- builder.Append(Environment.NewLine);
- builder.Append($"{tab}public class {ClassName}");
- builder.Append(Environment.NewLine);
- builder.Append($"{tab}{{");
- builder.Append(Environment.NewLine);
-
- builder.Append(WritePocoMemberFields());
-
- builder.Append($"{tab}}}");
- builder.Append(Environment.NewLine);
- builder.Append('}');
-
- return builder.ToString();
-
+ return
+ $$"""
+ #nullable disable warnings
+ namespace {{_settings.TargetNamespaceForPOCO}}
+ {
+ {{tab}}/// =================================================================
+ {{tab}}///
+ {{tab}}/// Poco class for the table {{Table.Name}}
+ {{tab}}/// Author: {{_settings.AuthorName}}
+ {{tab}}/// Poco: {{ClassName}}
+ {{tab}}/// Generated: {{_settings.GenerationTimestamp.ToString("yyyy-MM-dd HH:mm:ss")}} UTC
+ {{tab}}/// WARNING: Never change this file manually (re-generate it)
+ {{tab}}///
+ {{tab}}/// =================================================================
+ """;
}
private string WritePocoMemberFields()
@@ -80,7 +69,7 @@ private string WritePocoMemberFields()
? Table.Columns
: Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name));
- var members = String.Join(Environment.NewLine, columns.Select(col =>
+ var members = String.Join(Environment.NewLine + Environment.NewLine, columns.Select(col =>
{
var memberName = _stringTransform.PascalCase(col.Name);
var colSettings = TableSettings.GetColumnSettings(col.Name);
@@ -88,8 +77,9 @@ private string WritePocoMemberFields()
var decorators = WriteMemberDecorators(colSettings, memberType, col);
- return $"{decorators}{tab}{tab}public {memberType} {memberName} {{ get; set; }}"
- + Environment.NewLine;
+ return $"{(string.IsNullOrEmpty(decorators)
+ ? string.Empty
+ : decorators + Environment.NewLine)}{tab}{tab}public {memberType} {memberName} {{ get; set; }}";
}));
@@ -98,22 +88,15 @@ private string WritePocoMemberFields()
private string WriteMemberDecorators(SettingsColumn settings, string memberType, Column col)
{
- var decorators = new StringBuilder();
- var curDecoratorsLength = 0;
-
- decorators.Append(WriteMemberRequieredDecorator(settings, col));
- SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength);
-
- decorators.Append(WriteMemberStringDecorator(settings, memberType, col));
- SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength);
-
- decorators.Append(WriteMemberJsonIgnoreDecorator(col));
- SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength);
-
- decorators.Append(WriteMemberCustomDecorator(settings));
- SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength);
+ var decorators = new List
+ {
+ WriteMemberRequieredDecorator(settings, col),
+ WriteMemberStringDecorator(settings, memberType, col),
+ WriteMemberJsonIgnoreDecorator(col),
+ WriteMemberCustomDecorator(settings)
+ };
- return decorators.ToString();
+ return String.Join(Environment.NewLine, decorators.Where(d => !string.IsNullOrEmpty(d)));
}
private string WriteMemberStringDecorator(SettingsColumn settings, string memberType, Column col)
@@ -170,15 +153,5 @@ private string WriteMemberCustomDecorator(SettingsColumn settings)
return decorator;
}
-
- private static void SpaceBetweenDecorators(ref StringBuilder decorators, ref int curLength)
- {
- if (decorators.Length > curLength)
- {
- decorators.Append(Environment.NewLine);
- curLength = decorators.Length;
- }
- }
-
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs
index b7c8b61..d3671a8 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs
@@ -1,6 +1,5 @@
using Dapper_Layers_Generator.Core.Converters;
using Dapper_Layers_Generator.Core.Settings;
-using System.Text;
namespace Dapper_Layers_Generator.Core.Generators
{
@@ -21,46 +20,35 @@ public GeneratorRepoAdd(SettingsGlobal settingsGlobal
}
public override string Generate()
{
- if (TableSettings.AddGenerator)
- {
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParams());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForInsert());
- output.Append($"{tab}{tab}{tab}{tab}" + @GetValuesToInsert());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+ return TableSettings.AddGenerator
+ ? $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParamsForInsert()}}
- return output.ToString();
- }
+ {{WriteBaseSqlForInsert()}}
+ {{WriteValuesToInsert()}}
- return string.Empty;
+ {{WriteDapperCall()}}{{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+
+ """
+ : string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any())
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{GetPkMemberTypes()}> AddAsync({ClassName} " +
- $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" +
- @$"
-{tab}{tab}{{";
- else
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task AddAsync({ClassName} " +
- $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" +
- @$"
-{tab}{tab}{{";
+ return PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any()
+ ? $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task<{{GetPkMemberTypes()}}> AddAsync({{ClassName}} {{_stringTransform.ApplyConfigTransformMember(ClassName)}})
+ {{tab}}{{tab}}{
+ """
+ : $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task AddAsync({{ClassName}} {{_stringTransform.ApplyConfigTransformMember(ClassName)}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any())
return $"{tab}{tab}{tab}var identity = " +
@@ -73,29 +61,16 @@ protected override string GetDapperCall()
}
- protected virtual string GetDapperDynaParams()
- {
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
-
- var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement);
-
- var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col =>
- {
- return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});";
- }));
-
- output.Append(spParams);
- return output.ToString();
- }
-
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
//The base implementation is very minimal (no real return from the DB, need to be override by dbprovider specific)
if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any())
{
- return $"{tab}{tab}{tab}return identity;" + Environment.NewLine;
+ return
+ $"""
+
+ {tab}{tab}{tab}return identity;
+ """;
}
else
{
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs
index 211f642..4c7a65b 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs
@@ -10,7 +10,6 @@ public interface IGeneratorRepoAddBulk : IGeneratorFromTable
}
public class GeneratorRepoAddBulk : GeneratorForOperations, IGeneratorRepoAddBulk
{
-
public GeneratorRepoAddBulk(SettingsGlobal settingsGlobal
, IReaderDBDefinitionService data
, StringTransformationService stringTransformationService
@@ -24,35 +23,37 @@ public override string Generate()
{
if (TableSettings.AddBulkGenerator)
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
if (!IsBase)
{
//Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class
}
- return output.ToString();
+ return
+ $"""
+ {WriteMethodDef()}
+ """;
}
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows" + Environment.NewLine +
- $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task AddBulkAsync(IEnumerable<{ClassName}> " +
- $"{_stringTransform.PluralizeToLower(ClassName)}){(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$"
-{tab}{tab}{{" : Environment.NewLine);
-
+ return
+ $"""
+ {tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows
+ {tab}{tab}public {(IsBase ? "abstract" : "override async")} Task AddBulkAsync(IEnumerable<{ClassName}> {_stringTransform.PluralizeToLower(ClassName)}){(IsBase ? ";" : string.Empty)}
+ {(!IsBase ? @$"{tab}{tab}{{" : string.Empty)}
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return string.Empty;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs
index 68548e4..80f2528 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs
@@ -25,80 +25,49 @@ public override string Generate()
{
if (TableSettings.AddMultiGenerator)
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetOpenTransactionAndLoopBegin());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParams());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}"));
- output.Append($"{tab}{tab}{tab}{tab}{tab}" + @GetValuesToInsert().Replace($"{tab}{tab}{tab}{tab}",$"{tab}{tab}{tab}{tab}{tab}"));
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCloseTransaction());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
-
- return output.ToString();
- }
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteOpenTransactionAndLoopBegin()}}
+ {{WriteDapperDynaParamsForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}}
- return string.Empty;
- }
+ {{WriteBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}}
+ {{WriteValuesToInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}}
- protected override string GetMethodDef()
- {
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task AddAsync(IEnumerable<{ClassName}> " +
- $"{_stringTransform.PluralizeToLower(ClassName)})" +
- @$"
-{tab}{tab}{{";
- }
+ {{WriteDapperCall()}}
- protected override string GetDapperCall()
- {
- return $"{tab}{tab}{tab}{tab}_ = " +
- $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);" +
- Environment.NewLine +
- $"{tab}{tab}{tab}}}";
+ {{WriteCloseTransaction()}}
+ {{tab}}{{tab}}}
+
+ """;
+ }
+ return string.Empty;
}
- protected virtual string GetOpenTransactionAndLoopBegin()
+ protected override string WriteMethodDef()
{
- return @$"{tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null;
-
-{tab}{tab}{tab}if (!isTransAlreadyOpen)
-{tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync();
-
-{tab}{tab}{tab}foreach(var {_stringTransform.ApplyConfigTransformMember(ClassName)} in {_stringTransform.PluralizeToLower(ClassName)})
-{tab}{tab}{tab}{{";
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task AddAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}})
+ {{tab}}{{tab}}{
+ """;
}
- protected virtual string GetDapperDynaParams()
+ protected override string WriteDapperCall()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
-
- var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement);
-
- var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col =>
- {
- return $@"{tab}{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});";
- }));
+ var methodCall = $"{tab}{tab}{tab}{tab}_ = " +
+ $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
+ $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
- output.Append(spParams);
- return output.ToString();
+ return
+ $$"""
+ {{methodCall}}
+ {{tab}}{{tab}}{{tab}}}
+ """;
}
-
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs
index 3d2f67a..ce7fde8 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs
@@ -27,42 +27,39 @@ public override string Generate()
if (!PkColumns.Any())
throw new ArgumentException($"You cannot run the Get by Pk Generator for table {Table.Name}, no pk defined");
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(@GetDapperDynaParamsForPk());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetBaseSqlForDelete());
- output.Append(Environment.NewLine);
- output.Append(GetSqlWhereClauseForPk());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParamsForPk()}}
- return output.ToString();
+ {{WriteBaseSqlForDelete()}}
+ {{WriteSqlWhereClauseForPk()}}
+
+ {{WriteDapperCall()}}
+ {{tab}}{{tab}}}
+
+ """;
}
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task DeleteAsync({GetPkMemberNamesStringAndType()})" +
- @$"
-{tab}{tab}{{";
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task DeleteAsync({{GetPkMemberNamesStringAndType()}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs
index 56ca1e7..26132a0 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs
@@ -24,35 +24,37 @@ public override string Generate()
{
if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
if (!IsBase)
{
//Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class
}
- return output.ToString();
+ return
+ $"""
+ {WriteMethodDef()}
+ """;
}
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows" + Environment.NewLine +
- $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()})" +
- $"{(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$"
-{tab}{tab}{{" : Environment.NewLine);
-
+ return
+ $$"""
+ {{tab}}{{tab}}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows
+ {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task DeleteBulkAsync({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : string.Empty)}}
+ {{(!IsBase ? @$"{tab}{tab}{{" : string.Empty)}}
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return string.Empty;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs
index e277f76..94fe88c 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs
@@ -26,50 +26,53 @@ public override string Generate()
if (!PkColumns.Any())
throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined");
- var output = new StringBuilder();
- output.Append(GetMethodDef());
+ var output = string.Empty;
if (PkColumns.Count() == 1 || !IsBase)
{
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParamsForPkList());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForDelete());
- output.Append(Environment.NewLine);
- output.Append(GetSqlPkListWhereClause());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
+ output =
+ $$"""
+ {{WriteDapperDynaParamsForPkList()}}
+
+ {{WriteBaseSqlForDelete()}}
+ {{WriteSqlPkListWhereClause()}}
+
+ {{WriteDapperCall()}}
+ {{tab}}{{tab}}}
+
+ """;
}
- output.Append(Environment.NewLine);
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{output}}
+ """;
}
-
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return PkColumns.Count() > 1
- ? $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} " +
- $"Task DeleteAsync({GetPkMemberNamesStringAndTypeList()}){(IsBase ? ";" : String.Empty)}"
- : $"{tab}{tab}public {(IsBase ? "virtual" : "override")} " +
- $"async Task DeleteAsync({GetPkMemberNamesStringAndTypeList()})" +
- @$"
-{tab}{tab}{{";
+ if (PkColumns.Count() > 1)
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task DeleteAsync({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : String.Empty)}}
+ """;
+ else
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task DeleteAsync({{GetPkMemberNamesStringAndTypeList()}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs
index 141af29..0e357fd 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs
@@ -23,43 +23,39 @@ public override string Generate()
{
if (TableSettings.GetAllGenerator)
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForSelect()+ @""";");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
+ return
+ $$""""
+ {{WriteMethodDef()}}
+ {{WriteBaseSqlForSelect()}}
+ {{tab}}{{tab}}{{tab}}""";
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+ {{WriteDapperCall()}}
- return output.ToString();
- }
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+ """";
+ }
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}public {(IsBase?"virtual":"override")} async Task> GetAllAsync()" +
- @$"
-{tab}{tab}{{";
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task> GetAllAsync()
+ {{tab}}{{tab}}{
+ """;
}
-
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = " +
$"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"QueryAsync<{ClassName}>(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return $"{tab}{tab}{tab}return {_stringTransform.PluralizeToLower(ClassName)};";
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs
index e7717b9..61aeb3d 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs
@@ -27,46 +27,41 @@ public override string Generate()
if (!PkColumns.Any())
throw new ArgumentException($"You cannot run the Get by Pk Generator for table {Table.Name}, no pk defined");
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParamsForPk());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForSelect());
- output.Append(Environment.NewLine);
- output.Append(GetSqlWhereClauseForPk());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParamsForPk()}}
- return output.ToString();
- }
+ {{WriteBaseSqlForSelect()}}
+ {{WriteSqlWhereClauseForPk()}}
+
+ {{WriteDapperCall()}}
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+
+ """;
+ }
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()})" +
- @$"
-{tab}{tab}{{";
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task<{{ClassName}}?> GetBy{{GetPkMemberNamesString()}}Async({{GetPkMemberNamesStringAndType()}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}var {ClassName.ToLower()} = " +
$"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"QuerySingleOrDefaultAsync<{ClassName}>(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return $"{tab}{tab}{tab}return {ClassName.ToLower()};";
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs
index b5d4c59..fb234b1 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs
@@ -24,35 +24,36 @@ public override string Generate()
{
if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
if (!IsBase)
{
//Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class
}
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ """;
}
-
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows" + Environment.NewLine +
- $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()})" +
- $"{(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$"
-{tab}{tab}{{" : Environment.NewLine);
-
+ return
+ $$"""
+ {{tab}}{{tab}}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows
+ {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task> GetBy{{GetPkMemberNamesString()}}BulkAsync({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : string.Empty)}}
+ {{(!IsBase ? $"{tab}{tab}{{" : string.Empty)}}
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return string.Empty;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs
index e3f0150..26e0bd8 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs
@@ -22,54 +22,56 @@ public override string Generate()
{
if (TableSettings.GetByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
+ var output = string.Empty;
if (PkColumns.Count() == 1 || !IsBase)
{
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParamsForPkList());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForSelect());
- output.Append(Environment.NewLine);
- output.Append(GetSqlPkListWhereClause());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
+ output =
+ $$"""
+
+ {{WriteDapperDynaParamsForPkList()}}
+
+ {{WriteBaseSqlForSelect()}}
+ {{WriteSqlPkListWhereClause()}}
+
+ {{WriteDapperCall()}}
+
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+ """;
}
+ return
+ $$"""
+ {{WriteMethodDef()}}{{output}}
- output.Append(Environment.NewLine);
- return output.ToString();
+ """;
}
-
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return PkColumns.Count() > 1
- ? $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} " +
- $"Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()}){(IsBase ? ";" : String.Empty)}"
- : $"{tab}{tab}public {(IsBase ? "virtual" : "override")} " +
- $"async Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()})" +
- @$"
-{tab}{tab}{{";
+ if (PkColumns.Count() > 1)
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task> GetBy{{GetPkMemberNamesString()}}Async({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : String.Empty)}}
+ """;
+ else
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task> GetBy{{GetPkMemberNamesString()}}Async({{GetPkMemberNamesStringAndTypeList()}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = " +
$"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"QueryAsync<{ClassName}>(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return $"{tab}{tab}{tab}return {_stringTransform.PluralizeToLower(ClassName)};";
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs
index 7c97c26..5ba56fb 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs
@@ -31,23 +31,23 @@ public override string Generate()
foreach (var index in ColumnNamesByIndexNameDic)
{
_currentIndex = index;
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParams());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetBaseSqlForSelect());
- output.Append(Environment.NewLine);
- output.Append(GetSqlWhereClause());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+
+ var toBeAdded =
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParams()}}
+
+ {{WriteBaseSqlForSelect()}}
+ {{WriteSqlWhereClause()}}
+
+ {{WriteDapperCall()}}
+
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+
+ """;
+
+ output.Append(toBeAdded);
}
return output.ToString();
@@ -56,52 +56,51 @@ public override string Generate()
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{ClassName}?> GetBy{GetUkMemberNamesString(_currentIndex.Key)}Async({GetUkMemberNamesStringAndType(_currentIndex.Key)})" +
- @$"
-{tab}{tab}{{";
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task<{{ClassName}}?> GetBy{{GetUkMemberNamesString(_currentIndex.Key)}}Async({{GetUkMemberNamesStringAndType(_currentIndex.Key)}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}var {ClassName.ToLower()} = " +
$"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"QuerySingleOrDefaultAsync<{ClassName}>(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected virtual string GetSqlWhereClause()
+ protected virtual string WriteSqlWhereClause()
{
- var output = new StringBuilder();
-
- output.Append($"{tab}{tab}{tab}WHERE ");
-
var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}AND ", _currentIndex.Value.Select(col =>
{
return $"{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier} = @{col.Name}";
}));
- output.Append(whereClause + "\";");
- return output.ToString();
-
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}WHERE {{whereClause}}
+ {{tab}}{{tab}}{{tab}}""";
+ """";
}
- protected virtual string GetDapperDynaParams()
+ protected virtual string WriteDapperDynaParams()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
-
var spParams = String.Join(Environment.NewLine, _currentIndex.Value.Select(col =>
{
return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"",{_stringTransform.ApplyConfigTransformMember(col.Name)});";
}));
- output.Append(spParams);
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var p = new DynamicParameters();
+ {{spParams}}
+ """;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return $"{tab}{tab}{tab}return {ClassName.ToLower()};";
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs
index c6e8419..e567038 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs
@@ -23,86 +23,90 @@ public GeneratorRepoMain(SettingsGlobal settingsGlobal
public override string Generate()
{
- var output = new StringBuilder();
- output.Append(WriteRepoHeaderAndConstructor());
-
- if (string.IsNullOrEmpty(DbProviderString))
- output.Append(WriteInterface());
-
- output.Append(WriteClass());
-
- return output.ToString();
+ return string.IsNullOrEmpty(DbProviderString)
+ ? $$"""
+ {{WriteUsingStatements()}}
+ {{WriteRepoHeaderAndConstructor()}}
+ {{WriteInterface()}}
+ {{WriteClass()}}
+ """
+ : $$"""
+ {{WriteUsingStatements()}}
+ {{WriteRepoHeaderAndConstructor()}}
+ {{WriteClass()}}
+ """;
}
private string WriteRepoHeaderAndConstructor()
{
return string.IsNullOrEmpty(DbProviderString)
- ? $@"{@WriteUsingStatements()}
-// =================================================================
-// Repo class for table {Table.Name}
-// Base abstract class that can be used with no specific db provider
-// You can extend it via other partial files where you know that a
-// query can run the same on different db providers
-// Author: {_settings.AuthorName}
-// Repo name: {ClassName}RepoBase
-// Generated: {DateTime.Now}
-// WARNING: Never change this file manually (re-generate it)
-// =================================================================
-
-namespace {_settings.TargetNamespaceForRepo}
-{{"
- : $@"{@WriteUsingStatements()}
-// =================================================================
-// Repo class for table {Table.Name}
-// Specific repo implementation for dbprovider : {DbProviderString}
-// You can extend it via other partial files where you have specific
-// queries for specific dbs (if standard SQL is not sufficent)
-// Author: {_settings.AuthorName}
-// Repo name: {ClassName}Repo{DbProviderString}
-// Generated: {DateTime.Now}
-// WARNING: Never change this file manually (re-generate it)
-// =================================================================
-
-namespace {_settings.TargetNamespaceForRepo}
-{{";
-
+ ? $$"""
+ // =================================================================
+ // Repo class for table {{Table.Name}}
+ // Base abstract class that can be used with no specific db provider
+ // You can extend it via other partial files where you know that a
+ // query can run the same on different db providers
+ // Author: {{_settings.AuthorName}}
+ // Repo name: {{ClassName}}RepoBase
+ // Generated: {{_settings.GenerationTimestamp:yyyy-MM-dd HH:mm:ss}} UTC
+ // WARNING: Never change this file manually (re-generate it)
+ // =================================================================
+
+ namespace {{_settings.TargetNamespaceForRepo}}
+ {
+ """
+ : $$"""
+ // =================================================================
+ // Repo class for table {{Table.Name}}
+ // Specific repo implementation for dbprovider : {{DbProviderString}}
+ // You can extend it via other partial files where you have specific
+ // queries for specific dbs (if standard SQL is not sufficent)
+ // Author: {{_settings.AuthorName}}
+ // Repo name: {{ClassName}}Repo{{DbProviderString}}
+ // Generated: {{_settings.GenerationTimestamp:yyyy-MM-dd HH:mm:ss}} UTC
+ // WARNING: Never change this file manually (re-generate it)
+ // =================================================================
+
+ namespace {{_settings.TargetNamespaceForRepo}}
+ {
+ """;
}
private string WriteUsingStatements()
{
- string output = $@"using {_settings.TargetNamespaceForPOCO};
-using Dapper;
-using {_settings.TargetNamespaceForDbContext};
-{UsingDbProviderSpecific}
-
-";
- return output;
+ return
+ $$"""
+ using {{_settings.TargetNamespaceForPOCO}};
+ using Dapper;
+ using {{_settings.TargetNamespaceForDbContext}};{{(string.IsNullOrEmpty(UsingDbProviderSpecific)?string.Empty:Environment.NewLine+ UsingDbProviderSpecific)}}
+
+ """;
}
private string WriteClass()
{
-
return string.IsNullOrEmpty(DbProviderString)
- ? @$"
-{tab}public abstract partial class {ClassName}RepoBase : I{ClassName}Repo
-{tab}{{
-{tab}{tab}protected readonly I{_settings.DbContextClassName} _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)};
-{tab}{tab}
-{tab}{tab}public {ClassName}RepoBase(I{_settings.DbContextClassName} {_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)})
-{tab}{tab}{{
-{tab}{tab}{tab}_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)} = {_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)};
-{tab}{tab}}}
-
-"
- : @$"
-{tab}public partial class {ClassName}Repo{DbProviderString} : {ClassName}RepoBase, I{ClassName}Repo
-{tab}{{
-{tab}{tab}public {ClassName}Repo{DbProviderString}(I{_settings.DbContextClassName} {_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}): base ({_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)})
-{tab}{tab}{{
-{tab}{tab}}}
-
-";
-
+ ? $$"""
+ {{tab}}public abstract partial class {{ClassName}}RepoBase : I{{ClassName}}Repo
+ {{tab}}{
+ {{tab}}{{tab}}protected readonly I{{_settings.DbContextClassName}} _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}};
+ {{tab}}{{tab}}
+ {{tab}}{{tab}}public {{ClassName}}RepoBase(I{{_settings.DbContextClassName}} {{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}})
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}} = {{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}};
+ {{tab}}{{tab}}}
+
+
+ """
+ : $$"""
+ {{tab}}public partial class {{ClassName}}Repo{{DbProviderString}} : {{ClassName}}RepoBase, I{{ClassName}}Repo
+ {{tab}}{
+ {{tab}}{{tab}}public {{ClassName}}Repo{{DbProviderString}}(I{{_settings.DbContextClassName}} {{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}): base ({{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}})
+ {{tab}}{{tab}}{
+ {{tab}}{{tab}}}
+
+
+ """;
}
///
@@ -111,47 +115,45 @@ private string WriteClass()
///
private string WriteInterface()
{
- return $@"
-{tab}/// =================================================================
-{tab}/// Author: {_settings.AuthorName}
-{tab}/// Description: Interface for the repo {ClassName}Repo
-{tab}/// You can extend it with partial file
-{tab}/// =================================================================
-{tab}public partial interface I{ClassName}Repo
-{tab}{{
-{@WriteInterfaceMethods()}
-{tab}}}";
-
+ return
+ $$"""
+ {{tab}}/// =================================================================
+ {{tab}}/// Author: {{_settings.AuthorName}}
+ {{tab}}/// Description: Interface for the repo {{ClassName}}Repo
+ {{tab}}/// You can extend it with partial file
+ {{tab}}/// =================================================================
+ {{tab}}public partial interface I{{ClassName}}Repo
+ {{tab}}{
+ {{@WriteInterfaceMethods()}}
+ {{tab}}}
+
+ """;
}
private string WriteInterfaceMethods()
{
- var output = new StringBuilder();
+ var output = new List();
if (TableSettings.GetAllGenerator)
{
- output.Append($"{tab}{tab}Task> GetAllAsync();");
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task> GetAllAsync();");
}
if (TableSettings.GetByPkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- output.Append($"{tab}{tab}Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()});");
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()});");
}
//ByPk list
if (TableSettings.GetByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- output.Append($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()});");
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()});");
}
//By pk bulk
if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- output.Append($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()});");
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()});");
}
//By unique indexes
@@ -159,8 +161,7 @@ private string WriteInterfaceMethods()
{
foreach (var index in ColumnNamesByIndexNameDic)
{
- output.Append($"{tab}{tab}Task<{ClassName}?> GetBy{GetUkMemberNamesString(index.Key)}Async({GetUkMemberNamesStringAndType(index.Key)});");
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task<{ClassName}?> GetBy{GetUkMemberNamesString(index.Key)}Async({GetUkMemberNamesStringAndType(index.Key)});");
}
}
@@ -168,86 +169,67 @@ private string WriteInterfaceMethods()
if (TableSettings.AddGenerator)
{
if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any())
- output.Append($"{tab}{tab}Task<{GetPkMemberTypes()}> AddAsync({ClassName} " +
+ output.Add($"{tab}{tab}Task<{GetPkMemberTypes()}> AddAsync({ClassName} " +
$"{_stringTransform.ApplyConfigTransformMember(ClassName)});");
else
- output.Append($"{tab}{tab}Task AddAsync({ClassName} " +
+ output.Add($"{tab}{tab}Task AddAsync({ClassName} " +
$"{_stringTransform.ApplyConfigTransformMember(ClassName)});");
-
-
- output.Append(Environment.NewLine);
}
//Add multi
if (TableSettings.AddMultiGenerator)
{
- output.Append($"{tab}{tab}Task AddAsync(IEnumerable<{ClassName}> " +
+ output.Add($"{tab}{tab}Task AddAsync(IEnumerable<{ClassName}> " +
$"{_stringTransform.PluralizeToLower(ClassName)});");
-
- output.Append(Environment.NewLine);
}
//Add bulk
if (TableSettings.AddBulkGenerator)
{
- output.Append($"{tab}{tab}Task AddBulkAsync(IEnumerable<{ClassName}> " +
+ output.Add($"{tab}{tab}Task AddBulkAsync(IEnumerable<{ClassName}> " +
$"{_stringTransform.PluralizeToLower(ClassName)});");
-
- output.Append(Environment.NewLine);
}
//Update
if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
{
- output.Append($"{tab}{tab}Task UpdateAsync({ClassName} " +
+ output.Add($"{tab}{tab}Task UpdateAsync({ClassName} " +
$"{_stringTransform.ApplyConfigTransformMember(ClassName)});");
-
- output.Append(Environment.NewLine);
}
//Update multi
if (TableSettings.UpdateMultiGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
{
- output.Append($"{tab}{tab}Task UpdateAsync(IEnumerable<{ClassName}> " +
+ output.Add($"{tab}{tab}Task UpdateAsync(IEnumerable<{ClassName}> " +
$"{_stringTransform.PluralizeToLower(ClassName)});");
-
- output.Append(Environment.NewLine);
}
//Update bulk
if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
{
- output.Append($"{tab}{tab}Task UpdateBulkAsync(IEnumerable<{ClassName}> " +
+ output.Add($"{tab}{tab}Task UpdateBulkAsync(IEnumerable<{ClassName}> " +
$"{_stringTransform.PluralizeToLower(ClassName)});");
-
- output.Append(Environment.NewLine);
}
//Delete
if (TableSettings.DeleteGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- output.Append($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndType()});");
-
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndType()});");
}
//Delete by pklist
if (TableSettings.DeleteByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- output.Append($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndTypeList()});");
-
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndTypeList()});");
}
//Delete bulk
if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- output.Append($"{tab}{tab}Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()});");
-
- output.Append(Environment.NewLine);
+ output.Add($"{tab}{tab}Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()});");
}
- return output.ToString();
+ return String.Join(Environment.NewLine,output);
}
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs
index a235e03..18948ab 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs
@@ -23,47 +23,40 @@ public override string Generate()
{
if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParams());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetBaseSqlForUpdate());
- output.Append(GetSqlWhereClauseForPk());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParams()}}
- return output.ToString();
+ {{WriteBaseSqlForUpdate()}}
+ {{WriteSqlWhereClauseForPk()}}
+
+ {{WriteDapperCall()}}
+ {{tab}}{{tab}}}
+
+ """;
}
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync({ClassName} " +
- $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" +
- @$"
-{tab}{tab}{{";
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task UpdateAsync({{ClassName}} {{_stringTransform.ApplyConfigTransformMember(ClassName)}})
+ {{tab}}{{tab}}{
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
$"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);";
}
- protected virtual string GetDapperDynaParams()
+ protected virtual string WriteDapperDynaParams()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
-
var cols = ColumnForUpdateOperations!;
var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col =>
@@ -71,15 +64,16 @@ protected virtual string GetDapperDynaParams()
return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});";
}));
- output.Append(spParams);
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var p = new DynamicParameters();
+ {{spParams}}
+ """;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return $"{tab}{tab}{tab}return {ClassName.ToLower()};";
}
-
-
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs
index c211943..16ff8d3 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs
@@ -25,35 +25,37 @@ public override string Generate()
{
if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
if (!IsBase)
{
//Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class
}
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ """;
}
return string.Empty;
}
- protected override string GetMethodDef()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows" + Environment.NewLine +
- $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task UpdateBulkAsync(IEnumerable<{ClassName}> " +
- $"{_stringTransform.PluralizeToLower(ClassName)}){(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$"
-{tab}{tab}{{" : Environment.NewLine);
-
+ return
+ $$"""
+ {{tab}}{{tab}}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows
+ {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task UpdateBulkAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}}){{(IsBase ? ";" : string.Empty)}}
+ {{(!IsBase ? @$"{tab}{tab}{{" : string.Empty)}}
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return string.Empty;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs
index 6bfb34c..ba97da6 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs
@@ -22,80 +22,58 @@ public GeneratorRepoUpdateMulti(SettingsGlobal settingsGlobal
public override string Generate()
{
- if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
- {
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetOpenTransactionAndLoopBegin());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParams());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetBaseSqlForUpdate().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}"));
- output.Append(GetSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}"));
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCloseTransaction());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
+ return TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()
+ ? $$"""
+ {{WriteMethodDef()}}
+ {{WriteOpenTransactionAndLoopBegin()}}
+ {{GetDapperDynaParams()}}
- return output.ToString();
- }
+ {{WriteBaseSqlForUpdate().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}}
+ {{WriteSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}}
- return string.Empty;
- }
+ {{WriteDapperCall()}}
- protected override string GetMethodDef()
- {
- return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync(IEnumerable<{ClassName}> " +
- $"{_stringTransform.PluralizeToLower(ClassName)})" +
- @$"
-{tab}{tab}{{";
+ {{WriteCloseTransaction()}}
+ {{tab}}{{tab}}}
+
+ """
+ : string.Empty;
}
- protected override string GetDapperCall()
+ protected override string WriteMethodDef()
{
- return $"{tab}{tab}{tab}{tab}_ = " +
- $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);" +
- Environment.NewLine +
- $"{tab}{tab}{tab}}}";
-
+ return
+ $$"""
+ {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task UpdateAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}})
+ {{tab}}{{tab}}{
+ """;
}
- protected virtual string GetOpenTransactionAndLoopBegin()
- {
- return @$"{tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null;
-
-{tab}{tab}{tab}if (!isTransAlreadyOpen)
-{tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync();
-{tab}{tab}{tab}foreach(var {_stringTransform.ApplyConfigTransformMember(ClassName)} in {_stringTransform.PluralizeToLower(ClassName)})
-{tab}{tab}{tab}{{";
+ protected override string WriteDapperCall()
+ {
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sql,p,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
+ {{tab}}{{tab}}{{tab}}}
+ """;
}
protected virtual string GetDapperDynaParams()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}{tab}var p = new DynamicParameters();");
- output.Append(Environment.NewLine);
-
var cols = ColumnForUpdateOperations!;
-
var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col =>
{
return $@"{tab}{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});";
}));
- output.Append(spParams);
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}{{tab}}var p = new DynamicParameters();
+ {{spParams}}
+ """;
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return string.Empty;
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs
index 82b79a5..e2855ff 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs
@@ -1,6 +1,5 @@
using Dapper_Layers_Generator.Core.Converters;
using Dapper_Layers_Generator.Core.Settings;
-using System.Text;
namespace Dapper_Layers_Generator.Core.Generators.MySql
{
@@ -20,35 +19,37 @@ public MySqlGeneratorRepoAdd(SettingsGlobal settingsGlobal
IsBase = false;
}
- protected override string GetValuesToInsert()
+ protected override string WriteValuesToInsert()
{
- var output = new StringBuilder();
var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement);
-
var values = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", cols.OrderBy(c => c.Position).Select(col =>
{
return $@"@{col.Name}";
}));
-
- output.Append(values);
- output.Append(Environment.NewLine);
+ string identityClause = string.Empty;
if(PkColumns.Count() == 1 && PkColumns.Where(c=>c.IsAutoIncrement).Any())
{
- //Add return identity clause
- output.Append($@"{tab}{tab}{tab});");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}SELECT LAST_INSERT_ID();");
- output.Append($@""";");
+ identityClause =
+ $""""
+ {tab}{tab}{tab});
+ {tab}{tab}{tab}SELECT LAST_INSERT_ID();
+ {tab}{tab}{tab}""";
+ """";
}
else
- {
- output.Append($@"{tab}{tab}{tab})"";");
- }
-
- return output.ToString();
+ identityClause =
+ $""""
+ {tab}{tab}{tab})
+ {tab}{tab}{tab}""";
+ """";
+ return
+ $"""
+ {tab}{tab}{tab}{tab}{values}
+ {identityClause}
+ """;
}
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs
index acfdd40..8b5d06f 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs
@@ -1,6 +1,6 @@
using Dapper_Layers_Generator.Core.Converters;
using Dapper_Layers_Generator.Core.Settings;
-using Microsoft.Extensions.Primitives;
+using MySqlX.XDevAPI.Relational;
using System.Text;
namespace Dapper_Layers_Generator.Core.Generators.MySql
@@ -25,35 +25,27 @@ public override string Generate()
{
if (TableSettings.AddBulkGenerator)
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetOpenTransAndInitBulkMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetCreateDataTable());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCloseTransaction());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteOpenTransAndInitBulkMySql()}}
+
+ {{WriteCreateDataTable()}}
+
+ {{WriteDapperCall()}}
+
+ {{WriteCloseTransaction()}}
+ {{tab}}{{tab}}}
+
+ """;
}
return string.Empty;
}
-
- protected virtual string GetCreateDataTable()
+ protected virtual string WriteCreateDataTable()
{
var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var table = new DataTable();" + Environment.NewLine);
if (ColumnForInsertOperations == null || !ColumnForInsertOperations.Any())
throw new ArgumentException($"No column defined for insert (bulk), for table {Table.Name}");
@@ -61,12 +53,13 @@ protected virtual string GetCreateDataTable()
var columnsForBulk = ColumnForInsertOperations.Where(c => !c.IsAutoIncrement);
var rowsAdd = new List();
+ var colAdd = new List();
foreach (var colBulk in columnsForBulk)
{
- output.Append($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));" + Environment.NewLine);
+ colAdd.Add($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));");
if (colBulk.IsNullable)
{
- output.Append($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;" + Environment.NewLine);
+ colAdd.Add($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;");
rowsAdd.Add($"{tab}{tab}{tab}{tab}r[\"{colBulk.Name}\"] = {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)} == null " +
$"? DBNull.Value : {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)};");
@@ -77,40 +70,34 @@ protected virtual string GetCreateDataTable()
}
}
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab}bulkCopy.DestinationTableName = ""{Table.Name}"";");
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab}bulkCopy.BulkCopyTimeout = 600;");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- output.Append(@$"{tab}{tab}{tab}foreach(var {ClassName.ToLower()} in {_stringTransform.PluralizeToLower(ClassName)})
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}DataRow r = table.NewRow();");
-
- output.Append(Environment.NewLine);
- output.Append(String.Join(Environment.NewLine, rowsAdd));
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}{tab}table.Rows.Add(r);");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- output.Append($@"{tab}{tab}{tab}List colMappings = new();
-{tab}{tab}{tab}int i = 0;
-{tab}{tab}{tab}foreach (DataColumn col in table.Columns)
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
-{tab}{tab}{tab}{tab}i++;
-{tab}{tab}{tab}}}
-
-{tab}{tab}{tab}bulkCopy.ColumnMappings.AddRange(colMappings);");
-
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var table = new DataTable();
+ {{String.Join(Environment.NewLine,colAdd)}}
+
+ {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "{{Table.Name}}";
+ {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600;
+
+ {{tab}}{{tab}}{{tab}}foreach(var {{ClassName.ToLower()}} in {{_stringTransform.PluralizeToLower(ClassName)}})
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}DataRow r = table.NewRow();
+ {{String.Join(Environment.NewLine, rowsAdd)}}
+ {{tab}}{{tab}}{{tab}}{{tab}}table.Rows.Add(r);
+ {{tab}}{{tab}}{{tab}}}
+
+ {{tab}}{{tab}}{{tab}}List colMappings = new();
+ {{tab}}{{tab}}{{tab}}int i = 0;
+ {{tab}}{{tab}}{{tab}}foreach (DataColumn col in table.Columns)
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ {{tab}}{{tab}}{{tab}}{{tab}}i++;
+ {{tab}}{{tab}}{{tab}}}
+
+ {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings);
+ """;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
return $"{tab}{tab}{tab}await bulkCopy.WriteToServerAsync(table);";
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs
index 914fbad..ffac222 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs
@@ -1,6 +1,5 @@
using Dapper_Layers_Generator.Core.Converters;
using Dapper_Layers_Generator.Core.Settings;
-using Microsoft.Extensions.Primitives;
using System.Text;
namespace Dapper_Layers_Generator.Core.Generators.MySql
@@ -25,71 +24,57 @@ public override string Generate()
{
if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetOpenTransAndInitBulkMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCreateDbTmpTableForPksMySql("delete"));
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCreateDataTableForPkMySql("delete"));
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetBulkCallMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetDeleteFromTmpTable());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCloseTransaction());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteOpenTransAndInitBulkMySql()}}
+
+ {{WriteCreateDbTmpTableForPksMySql("delete")}}
+
+ {{WriteCreateDataTableForPkMySql("delete")}}
+
+ {{WriteBulkCallMySql()}}
+
+ {{WriteDeleteFromTmpTable()}}
+
+ {{WriteDapperCall()}}
+
+ {{WriteCloseTransaction()}}
+ {{tab}}{{tab}}}
+
+ """;
}
return string.Empty;
}
-
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
- var output = new StringBuilder($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sql,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}var sqlDrop = \"DROP TABLE {ColAndTableIdentifier}tmp_bulkdelete_{Table.Name}{ColAndTableIdentifier};\";");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sqlDrop,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
+ {{tab}}{{tab}}{{tab}}var sqlDrop = "DROP TABLE {{ColAndTableIdentifier}}tmp_bulkdelete_{{Table.Name}}{{ColAndTableIdentifier}};";
- return output.ToString();
+ {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqlDrop,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
+ """;
}
- protected virtual string GetDeleteFromTmpTable()
+ protected virtual string WriteDeleteFromTmpTable()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var sql = @\"DELETE t1 FROM {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} t1" + Environment.NewLine +
- $"{tab}{tab}{tab}{tab}INNER JOIN {ColAndTableIdentifier}tmp_bulkdelete_{Table.Name}{ColAndTableIdentifier} t2 ON " + Environment.NewLine +
- $"{tab}{tab}{tab}{tab}");
-
//Delete fields
var fields = String.Join($" AND ", PkColumns!.Select(c =>
$"t1.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}"));
- output.Append(fields);
- output.Append("\";");
-
- return output.ToString();
-
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}var sql =
+ {{tab}}{{tab}}{{tab}}"""
+ {{tab}}{{tab}}{{tab}}DELETE t1 FROM {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} t1
+ {{tab}}{{tab}}{{tab}}INNER JOIN {{ColAndTableIdentifier}}tmp_bulkdelete_{{Table.Name}}{{ColAndTableIdentifier}} t2 ON
+ {{tab}}{{tab}}{{tab}}{{fields}};
+ {{tab}}{{tab}}{{tab}}""";
+ """";
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs
index 282582a..b3e9550 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs
@@ -30,47 +30,45 @@ public override string Generate()
if (!PkColumns.Any())
throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined");
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParamsForPkList());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParamsForPkList()}}
+
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+
+ """;
}
return string.Empty;
}
- protected override string GetSqlPkListWhereClause()
+ protected override string WriteSqlPkListWhereClause()
{
- return PkColumns.Count() > 1 ? string.Empty : base.GetSqlPkListWhereClause();
+ return PkColumns.Count() > 1 ? string.Empty : base.WriteSqlPkListWhereClause();
}
- protected override string GetDapperDynaParamsForPkList()
+ protected override string WriteDapperDynaParamsForPkList()
{
- return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.GetDapperDynaParamsForPkList();
+ return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.WriteDapperDynaParamsForPkList();
}
- protected override string GetBaseSqlForDelete()
+ protected override string WriteBaseSqlForDelete()
{
- return PkColumns.Count() > 1 ? string.Empty : base.GetBaseSqlForDelete();
+ return PkColumns.Count() > 1 ? string.Empty : base.WriteBaseSqlForDelete();
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
- return PkColumns.Count() > 1 ? string.Empty : base.GetDapperCall();
+ return PkColumns.Count() > 1 ? string.Empty : base.WriteDapperCall();
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return PkColumns.Count() > 1
? $"{tab}{tab}{tab}await DeleteBulkAsync({GetPKMemberNamesStringList()});"
- : base.GetReturnObj();
+ : base.WriteReturnObj();
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs
index ee9aa8b..503bd79 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs
@@ -22,79 +22,58 @@ public MySqlGeneratorRepoGetByPkBulk(SettingsGlobal settingsGlobal
public override string Generate()
{
- if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
+ if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString()))
{
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetOpenTransAndInitBulkMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCreateDbTmpTableForPksMySql("get"));
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCreateDataTableForPkMySql("get"));
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetBulkCallMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetSelectFromTmpTable());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCloseTransaction());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- return output.ToString();
- }
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteOpenTransAndInitBulkMySql()}}
+
+ {{WriteCreateDbTmpTableForPksMySql("get")}}
+
+ {{WriteCreateDataTableForPkMySql("get")}}
+
+ {{WriteBulkCallMySql()}}
+
+ {{GetSelectFromTmpTable()}}
+
+ {{WriteDapperCall()}}
+
+ {{WriteCloseTransaction()}}
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+
+ """;
+ }
return string.Empty;
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
- var output = new StringBuilder($"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"QueryAsync<{ClassName}>(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
-
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}var sqlDrop = \"DROP TABLE {ColAndTableIdentifier}tmp_bulkget_{Table.Name}{ColAndTableIdentifier};\";");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sqlDrop,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
-
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var {{_stringTransform.PluralizeToLower(ClassName)}} = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.QueryAsync<{{ClassName}}>(sql,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
+ {{tab}}{{tab}}{{tab}}var sqlDrop = "DROP TABLE {{ColAndTableIdentifier}}tmp_bulkget_{{Table.Name}}{{ColAndTableIdentifier}};";
+ {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqlDrop,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
+ """;
}
protected virtual string GetSelectFromTmpTable()
{
- var output = new StringBuilder();
- output.Append(@GetBaseSqlForSelect("t1."));
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}INNER JOIN {ColAndTableIdentifier}tmp_bulkget_{Table.Name}{ColAndTableIdentifier} t2 ON " + Environment.NewLine +
- $"{tab}{tab}{tab}{tab}");
-
- //Delete fields
var fields = String.Join($" AND ", PkColumns!.Select(c =>
$"t1.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}"));
- output.Append(fields);
- output.Append("\";");
-
- return output.ToString();
-
+ return
+ $$""""
+ {{WriteBaseSqlForSelect("t1.")}}
+ {{tab}}{{tab}}{{tab}}INNER JOIN {{ColAndTableIdentifier}}tmp_bulkget_{{Table.Name}}{{ColAndTableIdentifier}} t2 ON
+ {{tab}}{{tab}}{{tab}}{{tab}}{{fields}}"
+ {{tab}}{{tab}}{{tab}}""";
+ """";
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return $"{tab}{tab}{tab}return {_stringTransform.PluralizeToLower(ClassName)};";
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs
index f465cc6..b929ce0 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs
@@ -30,37 +30,33 @@ public override string Generate()
if (!PkColumns.Any())
throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined");
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetDapperDynaParamsForPkList());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetReturnObj());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
- return output.ToString();
+ return
+ $$"""
+ {{WriteMethodDef()}}
+ {{WriteDapperDynaParamsForPkList()}}
+ {{WriteReturnObj()}}
+ {{tab}}{{tab}}}
+
+ """;
}
-
return string.Empty;
}
- protected override string GetSqlPkListWhereClause()
+ protected override string WriteSqlPkListWhereClause()
{
- return PkColumns.Count() > 1 ? string.Empty : base.GetSqlPkListWhereClause();
+ return PkColumns.Count() > 1 ? string.Empty : base.WriteSqlPkListWhereClause();
}
- protected override string GetDapperDynaParamsForPkList()
+ protected override string WriteDapperDynaParamsForPkList()
{
- return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.GetDapperDynaParamsForPkList();
+ return PkColumns.Count() > 1 ? @$"{tab}{tab}{{" : base.WriteDapperDynaParamsForPkList();
}
- protected override string GetReturnObj()
+ protected override string WriteReturnObj()
{
return PkColumns.Count() > 1
? $"{tab}{tab}{tab}return await GetBy{GetPkMemberNamesString()}BulkAsync({GetPKMemberNamesStringList()});"
- : base.GetReturnObj();
+ : base.WriteReturnObj();
}
}
diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs
index 5e245fa..7eefdab 100644
--- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs
+++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs
@@ -23,61 +23,45 @@ public MySqlGeneratorRepoUpdateBulk(SettingsGlobal settingsGlobal
public override string Generate()
{
- if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any())
- {
- var output = new StringBuilder();
- output.Append(GetMethodDef());
- output.Append(Environment.NewLine);
- output.Append(GetOpenTransAndInitBulkMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCreateDbTmpTable());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCreateDataTable());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetBulkCallMySql());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetUpdateFromTmpTable());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(@GetDapperCall());
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append(GetCloseTransaction());
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- return output.ToString();
- }
+ return TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()
+ ? $$"""
+ {{WriteMethodDef()}}
+ {{WriteOpenTransAndInitBulkMySql()}}
+
+ {{WriteCreateDbTmpTable()}}
+
+ {{WriteCreateDataTable()}}
+
+ {{WriteBulkCallMySql()}}
- return string.Empty;
+ {{WriteUpdateFromTmpTable()}}
+
+ {{WriteDapperCall()}}
+
+ {{WriteCloseTransaction()}}
+ {{tab}}{{tab}}}
+
+ """
+ : string.Empty;
}
- protected virtual string GetCreateDataTable()
+ protected virtual string WriteCreateDataTable()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var table = new DataTable();" + Environment.NewLine);
-
if (ColumnForUpdateOperations == null || !ColumnForUpdateOperations.Any())
throw new ArgumentException($"No column defined for update (bulk), for table {Table.Name}");
var columnsForBulk = ColumnForUpdateOperations;
var rowsAdd = new List();
+ var colAdd = new List();
foreach (var colBulk in columnsForBulk)
{
- output.Append($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));" + Environment.NewLine);
+ colAdd.Add($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));");
if (colBulk.IsNullable)
{
- output.Append($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;" + Environment.NewLine);
+ colAdd.Add($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;");
rowsAdd.Add($"{tab}{tab}{tab}{tab}r[\"{colBulk.Name}\"] = {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)} == null " +
$"? DBNull.Value : {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)};");
-
}
else
{
@@ -85,93 +69,75 @@ protected virtual string GetCreateDataTable()
}
}
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab}bulkCopy.DestinationTableName = ""tmp_bulkupd_{Table.Name}"";");
- output.Append(Environment.NewLine);
- output.Append($@"{tab}{tab}{tab}bulkCopy.BulkCopyTimeout = 600;");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- output.Append(@$"{tab}{tab}{tab}foreach(var {ClassName.ToLower()} in {_stringTransform.PluralizeToLower(ClassName)})
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}DataRow r = table.NewRow();");
-
- output.Append(Environment.NewLine);
- output.Append(String.Join(Environment.NewLine, rowsAdd));
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}{tab}table.Rows.Add(r);");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}}}");
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
-
- output.Append($@"{tab}{tab}{tab}List colMappings = new();
-{tab}{tab}{tab}int i = 0;
-{tab}{tab}{tab}foreach (DataColumn col in table.Columns)
-{tab}{tab}{tab}{{
-{tab}{tab}{tab}{tab}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
-{tab}{tab}{tab}{tab}i++;
-{tab}{tab}{tab}}}
-
-{tab}{tab}{tab}bulkCopy.ColumnMappings.AddRange(colMappings);");
-
- return output.ToString();
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}var table = new DataTable();
+ {{String.Join(Environment.NewLine, colAdd)}}
+
+ {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "tmp_bulkupd_{{Table.Name}}";
+ {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600;
+
+ {{tab}}{{tab}}{{tab}}foreach(var {{ClassName.ToLower()}} in {{_stringTransform.PluralizeToLower(ClassName)}})
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}DataRow r = table.NewRow();
+ {{String.Join(Environment.NewLine, rowsAdd)}}
+ {{tab}}{{tab}}{{tab}}{{tab}}table.Rows.Add(r);
+ {{tab}}{{tab}}{{tab}}}
+
+ {{tab}}{{tab}}{{tab}}List colMappings = new();
+ {{tab}}{{tab}}{{tab}}int i = 0;
+ {{tab}}{{tab}}{{tab}}foreach (DataColumn col in table.Columns)
+ {{tab}}{{tab}}{{tab}}{
+ {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ {{tab}}{{tab}}{{tab}}{{tab}}i++;
+ {{tab}}{{tab}}{{tab}}}
+
+ {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings);
+ """;
}
- protected virtual string GetCreateDbTmpTable()
+ protected virtual string WriteCreateDbTmpTable()
{
- var output = new StringBuilder();
-
- output.Append($"{tab}{tab}{tab}var sqltmp = \"CREATE TEMPORARY TABLE " +
- $"{ColAndTableIdentifier}tmp_bulkupd_{Table.Name}{ColAndTableIdentifier} LIKE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier};\";");
-
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
-
- return output.ToString();
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}var sqltmp = $"CREATE TEMPORARY TABLE {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}} LIKE {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}};";
+ {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqltmp,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
+ """";
}
- protected override string GetDapperCall()
+ protected override string WriteDapperCall()
{
- var output = new StringBuilder($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
-
- output.Append(Environment.NewLine);
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}var sqlDrop = \"DROP TABLE {ColAndTableIdentifier}tmp_bulkupd_{Table.Name}{ColAndTableIdentifier};\";");
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." +
- $"ExecuteAsync(sqlDrop,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);");
+ return
+ $$"""
+ {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sql,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
- return output.ToString();
+ {{tab}}{{tab}}{{tab}}var sqlDrop = "DROP TABLE {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}};";
+ {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqlDrop,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction);
+ """;
}
- protected virtual string GetUpdateFromTmpTable()
+ protected virtual string WriteUpdateFromTmpTable()
{
- var output = new StringBuilder();
- output.Append($"{tab}{tab}{tab}var sql = @\"UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} t1, " +
- $"{ColAndTableIdentifier}tmp_bulkupd_{Table.Name}{ColAndTableIdentifier} t2" + Environment.NewLine +
- $"{tab}{tab}{tab}{tab}SET" + Environment.NewLine + $"{tab}{tab}{tab}{tab}");
-
//Update fields
var fields = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}{tab},", ColumnForUpdateOperations!.Where(c=>!c.IsAutoIncrement).Select(c =>
$"t1.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}"));
- output.Append(fields);
- output.Append(Environment.NewLine);
- output.Append($"{tab}{tab}{tab}{tab}WHERE ");
-
var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}AND ", PkColumns.Select(col =>
{
return $"t1.{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier}";
}));
- output.Append(whereClause + "\";");
-
- return output.ToString();
-
+ return
+ $$""""
+ {{tab}}{{tab}}{{tab}}var sql =
+ {{tab}}{{tab}}{{tab}}"""
+ {{tab}}{{tab}}{{tab}}UPDATE {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} t1, {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}} t2
+ {{tab}}{{tab}}{{tab}}{{tab}}SET
+ {{tab}}{{tab}}{{tab}}{{tab}}{{fields}}
+ {{tab}}{{tab}}{{tab}}{{tab}}WHERE {{whereClause}};
+ {{tab}}{{tab}}{{tab}}""";
+ """";
}
}
}
diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj
index 08e6f39..5656c88 100644
--- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj
+++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj
@@ -1,4 +1,4 @@
-
+
net7.0
@@ -12,7 +12,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -38,11 +84,32 @@
Always
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs
new file mode 100644
index 0000000..c51fb55
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs
@@ -0,0 +1,29 @@
+using Dapper_Layers_Generator.Core.Settings;
+using Dapper_Layers_Generator.Core;
+using Moq;
+using Dapper_Layers_Generator.Test.Config;
+using System.Text.Json;
+using Dapper_Layers_Generator.Data.POCO;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorBaseTest
+ {
+ protected Mock _mockDbDefinitions;
+ protected SettingsGlobal _settings;
+
+ public GeneratorBaseTest()
+ {
+ //Fake DB
+ var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json");
+ var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB");
+ _mockDbDefinitions = new Mock();
+ _mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas);
+
+ //Standard settings
+ var settings = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/baseconfig.json");
+ _settings = JsonSerializer.Deserialize(settings) ?? throw new NullReferenceException("Cannot test without standard settings");
+ }
+ }
+}
+
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs
index 72ea8ad..dc3704d 100644
--- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs
@@ -1,38 +1,35 @@
-using Dapper_Layers_Generator.Core.Settings;
-using Dapper_Layers_Generator.Test.Config;
-using Moq;
-using System.Text.Json;
-using Dapper_Layers_Generator.Data.POCO;
+using Dapper_Layers_Generator.Test.Config;
using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Generators;
namespace Dapper_Layers_Generator.Core.Generators.Tests
{
- public class GeneratorContextForBase_Tests
+ public class GeneratorContextForBase_Tests : GeneratorBaseTest
{
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var transformString = new StringTransformationService(_settings);
+ var generator = new GeneratorContextForBase(_settings, _mockDbDefinitions.Object, transformString);
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultStandard.txt");
- private Mock _mockDbDefinitions;
- private SettingsGlobal _settings;
+ //Act
+ var result = generator.Generate();
- public GeneratorContextForBase_Tests()
- {
- //Fake DB
- var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json");
- var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB");
- _mockDbDefinitions = new Mock();
- _mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas);
-
- //Standard settings
- var settings = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/baseconfig.json");
- _settings = JsonSerializer.Deserialize(settings) ?? throw new NullReferenceException("Cannot test without standard settings");
+ //Assert
+ Assert.Equal(expected, result);
}
[Fact()]
- public void GenerateStandard_Test()
+ public void GenerateChangeDbContextName_Test()
{
//Arrange
var transformString = new StringTransformationService(_settings);
var generator = new GeneratorContextForBase(_settings, _mockDbDefinitions.Object, transformString);
- var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultStandard.txt");
+ _settings.DbContextClassName = "TestOtherDBContext";
+
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt");
//Act
var result = generator.Generate();
@@ -41,5 +38,7 @@ public void GenerateStandard_Test()
Assert.Equal(expected, result);
}
+
+
}
}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs
new file mode 100644
index 0000000..2906e3b
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs
@@ -0,0 +1,151 @@
+using Dapper_Layers_Generator.Test.Generators;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Moq;
+using System.Text.Json;
+using Dapper_Layers_Generator.Data.POCO;
+using Dapper_Layers_Generator.Core.Settings;
+
+namespace Dapper_Layers_Generator.Core.Generators.Tests
+{
+ public class GeneratorPOCO_Tests : GeneratorBaseTest
+ {
+ //need to be reviewed if dataconverted will change between db provider
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorPOCO_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void SetTableNotFound_Test()
+ {
+ //Arrange
+ var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+
+ //Act
+ var exception = Record.Exception(() => generator.SetTable("zzzz"));
+
+ //Assert
+ Assert.NotNull(exception);
+ Assert.IsType(exception);
+ }
+
+
+ [Fact()]
+ public void SetTableColumnsNotFound_Test()
+ {
+ //Arrange
+ var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json");
+ var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB");
+ schemas[0].Tables!.Where(t => t.Name == "clients").Single().Columns = null;
+ var mockDbDefinitions = new Mock();
+ mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas);
+
+ var generator = new GeneratorPOCO(_settings, mockDbDefinitions.Object, _transformString, _dataConverter);
+
+ //Act
+ var exception = Record.Exception(() => generator.SetTable("clients"));
+
+ //Assert
+ Assert.NotNull(exception);
+ Assert.IsType(exception);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateWithoutStringLengthDecoInAllSchema_Test()
+ {
+ //Arrange
+ var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ _settings.TableGlobalSettings.ColumnGlobalSettings.StandardStringLengthDecorator = false;
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateWithoutStringLengthDecoInTable_Test()
+ {
+ //Arrange
+ var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ _settings.TableSettings = new Dictionary()
+ {
+ {
+ "clients",
+ new SettingsTable
+ {
+ ColumnGlobalSettings = new SettingsColumn
+ {
+ StandardStringLengthDecorator = false
+ }
+ }
+ }
+ };
+
+ generator.SetTable("clients");
+
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateWithoutStringLengthDecoOnlyOneColumn_Test()
+ {
+ //Arrange
+ var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ _settings.TableSettings = new Dictionary()
+ {
+ {
+ "clients",
+ new SettingsTable
+ {
+ ColumnSettings = new Dictionary{
+ {
+ "lastname",
+ new SettingsColumn{StandardStringLengthDecorator= false}
+ } }
+ }
+ }
+ };
+
+ generator.SetTable("clients");
+
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs
new file mode 100644
index 0000000..47a64e1
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoAddMulti_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoAddMulti_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoAddMulti(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs
new file mode 100644
index 0000000..15e6cf0
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs
@@ -0,0 +1,50 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Core.Generators;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoAdd_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoAdd_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs
new file mode 100644
index 0000000..54bc6ee
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs
@@ -0,0 +1,50 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Core.Generators;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoDeleteByPkList_Test : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoDeleteByPkList_Test() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs
new file mode 100644
index 0000000..8126a57
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs
@@ -0,0 +1,50 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoDelete_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoDelete_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoDelete(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoDelete(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs
new file mode 100644
index 0000000..2a09c5e
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoGetAll_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoGetAll_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoGetAll(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs
new file mode 100644
index 0000000..16794fa
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs
@@ -0,0 +1,49 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Core.Generators;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoGetByPkList_Test : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoGetByPkList_Test() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs
new file mode 100644
index 0000000..1396eae
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoGetByPk_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoGetByPk_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoGetByPk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs
new file mode 100644
index 0000000..b5dc893
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoGetByUk_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoGetByUk_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoGetByUk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs
new file mode 100644
index 0000000..b8983ee
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoMain_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoMain_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoMain(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs
new file mode 100644
index 0000000..91dcd31
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoUpdateMulti_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoUpdateMulti_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoUpdateMulti(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs
new file mode 100644
index 0000000..e4b417f
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators
+{
+ public class GeneratorRepoUpdate_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public GeneratorRepoUpdate_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new GeneratorRepoUpdate(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs
index d3e8fa6..f5a03d9 100644
--- a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs
+++ b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs
@@ -1,29 +1,12 @@
-using Moq;
-using Dapper_Layers_Generator.Data.POCO;
-using JsonSerializer = System.Text.Json.JsonSerializer;
+using Dapper_Layers_Generator.Data.POCO;
using Dapper_Layers_Generator.Core.Converters;
-using Dapper_Layers_Generator.Core.Settings;
-using Dapper_Layers_Generator.Test.Config;
using Dapper_Layers_Generator.Core.Generators.MySql;
-namespace Dapper_Layers_Generator.Core.Generators.Tests
+namespace Dapper_Layers_Generator.Test.Generators
{
- public class Generator_Tests
+ public class Generator_Tests : GeneratorBaseTest
{
- private Mock _mockDbDefinitions;
- //No need for a base config
- private SettingsGlobal _settings = new();
-
- public Generator_Tests()
- {
- var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json");
- var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB");
- _mockDbDefinitions = new Mock();
- _mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas);
- _settings.SelectedSchema = "mobileflow";
- }
-
[Fact]
public void GetSelectedTableNamesWithSelection_Test()
{
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs
new file mode 100644
index 0000000..3c594d3
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs
@@ -0,0 +1,24 @@
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Test.Generators;
+using Dapper_Layers_Generator.Core.Converters;
+
+namespace Dapper_Layers_Generator.Core.Generators.MySql.Tests
+{
+ public class MySqlGeneratorContext_Tests : GeneratorBaseTest
+ {
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var transformString = new StringTransformationService(_settings);
+ var generator = new MySqlGeneratorContext(_settings, _mockDbDefinitions.Object, transformString);
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs
new file mode 100644
index 0000000..9868920
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs
@@ -0,0 +1,36 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoAddBulk_Test : GeneratorBaseTest
+ {
+ //need to be reviewed if dataconverted will change between db provider
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoAddBulk_Test() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoAddBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs
new file mode 100644
index 0000000..edf6617
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs
@@ -0,0 +1,51 @@
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoAdd_Test : GeneratorBaseTest
+ {
+ //need to be reviewed if dataconverted will change between db provider
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoAdd_Test() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs
new file mode 100644
index 0000000..8538f0c
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs
@@ -0,0 +1,49 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoDeleteBulk_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoDeleteBulk_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoDeleteBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoDeleteBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs
new file mode 100644
index 0000000..98923f7
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs
@@ -0,0 +1,49 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Test.Config;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoDeleteByPkList_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoDeleteByPkList_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs
new file mode 100644
index 0000000..0a94aef
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs
@@ -0,0 +1,49 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoGetByPkBulk_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoGetByPkBulk_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoGetByPkBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoGetByPkBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs
new file mode 100644
index 0000000..8a33d00
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs
@@ -0,0 +1,49 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoGetByPkList_Test : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoGetByPkList_Test() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+
+ [Fact()]
+ public void GenerateCompositePk_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("damages_failures");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs
new file mode 100644
index 0000000..8a13408
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoMain_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoMain_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoMain(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs
new file mode 100644
index 0000000..8053e7c
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs
@@ -0,0 +1,34 @@
+using Dapper_Layers_Generator.Core.Converters.MySql;
+using Dapper_Layers_Generator.Core.Converters;
+using Dapper_Layers_Generator.Core.Generators.MySql;
+using Dapper_Layers_Generator.Test.Config;
+
+namespace Dapper_Layers_Generator.Test.Generators.MySql
+{
+ public class MySqlGeneratorRepoUpdateBulk_Tests : GeneratorBaseTest
+ {
+ private MySqlDataTypeConverter _dataConverter;
+ private StringTransformationService _transformString;
+
+ public MySqlGeneratorRepoUpdateBulk_Tests() : base()
+ {
+ _dataConverter = new MySqlDataTypeConverter();
+ _transformString = new StringTransformationService(_settings);
+ }
+
+ [Fact()]
+ public void GenerateStandard_Test()
+ {
+ //Arrange
+ var generator = new MySqlGeneratorRepoUpdateBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter);
+ generator.SetTable("clients");
+ var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt");
+
+ //Act
+ var result = generator.Generate();
+
+ //Assert
+ Assert.Equal(expected, result);
+ }
+ }
+}
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt
new file mode 100644
index 0000000..9d961df
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt
@@ -0,0 +1,168 @@
+using System.Data;
+using Microsoft.Extensions.Configuration;
+using DapperTest.Repo;
+
+// =================================================================
+// DBContext implements all repo management + a small context factory
+// this file contains interfaces declaration and abstract
+// base classes for factory and DB context
+// Author: Dapper Generator
+// Context name: TestOtherDBContext
+// Generated: 2022-12-01 12:46:29 UTC
+// WARNING: Never change this file manually (re-generate it)
+// =================================================================
+
+namespace DapperTest.DbContext
+{
+ public interface ITestOtherDBContext : IDisposable
+ {
+ IDbConnection Connection { get; }
+ IDbTransaction? Transaction { get; }
+
+ Task OpenTransactionAsync(IsolationLevel? level = null);
+ void CommitTransaction(bool disposeTrans = true);
+ void RollbackTransaction(bool disposeTrans = true);
+
+ IStateRepo StateRepo { get; }
+ IClientRepo ClientRepo { get; }
+ IRefreshTokenRepo RefreshTokenRepo { get; }
+ IHistorystateRepo HistorystateRepo { get; }
+ IRepairerRepo RepairerRepo { get; }
+ IUserRepo UserRepo { get; }
+ IDamageRepo DamageRepo { get; }
+ IDamageFailureRepo DamageFailureRepo { get; }
+ IFailureRepo FailureRepo { get; }
+ }
+
+ ///
+ ///Interface for TestOtherDBContextFactory
+ ///
+ public interface ITestOtherDBContextFactory
+ {
+ ITestOtherDBContext Create();
+ }
+
+ ///
+ /// Used when the DBcontext itself is not suffisent to manage its lifecycle
+ /// Very simple implementation
+ ///
+ public abstract class TestOtherDBContextFactoryBase : ITestOtherDBContextFactory
+ {
+ protected readonly IConfiguration _config;
+
+ public TestOtherDBContextFactoryBase(IConfiguration config)
+ {
+ _config = config;
+ }
+
+ public abstract ITestOtherDBContext Create();
+ }
+
+ ///
+ /// Abstract DBContext base
+ ///
+ public abstract class TestOtherDBContextBase : ITestOtherDBContext
+ {
+ protected readonly IConfiguration _config;
+ public abstract IDbConnection Connection {get;init;}
+
+ protected IDbTransaction? _trans = null;
+ public IDbTransaction? Transaction {
+ get => _trans;
+ }
+
+ private bool _disposed = false;
+
+ protected IStateRepo? _stateRepo;
+ public abstract IStateRepo StateRepo { get; }
+ protected IClientRepo? _clientRepo;
+ public abstract IClientRepo ClientRepo { get; }
+ protected IRefreshTokenRepo? _refreshTokenRepo;
+ public abstract IRefreshTokenRepo RefreshTokenRepo { get; }
+ protected IHistorystateRepo? _historystateRepo;
+ public abstract IHistorystateRepo HistorystateRepo { get; }
+ protected IRepairerRepo? _repairerRepo;
+ public abstract IRepairerRepo RepairerRepo { get; }
+ protected IUserRepo? _userRepo;
+ public abstract IUserRepo UserRepo { get; }
+ protected IDamageRepo? _damageRepo;
+ public abstract IDamageRepo DamageRepo { get; }
+ protected IDamageFailureRepo? _damageFailureRepo;
+ public abstract IDamageFailureRepo DamageFailureRepo { get; }
+ protected IFailureRepo? _failureRepo;
+ public abstract IFailureRepo FailureRepo { get; }
+
+ ///
+ /// Main constructor, inject standard config
+ ///
+ public TestOtherDBContextBase(IConfiguration config)
+ {
+ _config = config;
+ }
+
+ ///
+ /// Open a transaction with a specified isolation level
+ ///
+ public abstract Task OpenTransactionAsync(IsolationLevel? level);
+
+ ///
+ /// Commit the current transaction, and optionally dispose all resources related to the transaction.
+ ///
+ public void CommitTransaction(bool disposeTrans = true)
+ {
+ if (_trans == null)
+ throw new NullReferenceException("DB Transaction is not present.");
+
+ _trans.Commit();
+
+ if (disposeTrans)
+ {
+ _trans.Dispose();
+ _trans = null;
+ }
+ }
+
+ ///
+ /// Rollback the transaction and all the operations linked to it, and optionally dispose all resources related to the transaction.
+ ///
+ public void RollbackTransaction(bool disposeTrans = true)
+ {
+ if (_trans == null)
+ throw new NullReferenceException("DB Transaction is not present.");
+
+ _trans.Rollback();
+
+ if (disposeTrans)
+ {
+ _trans.Dispose();
+ _trans = null;
+ }
+ }
+
+ ///
+ /// Will be call at the end of the service (ex : transient service in api net core)
+ ///
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ///
+ /// Better way to dispose if someone needs to inherit the DB context and have to dispose unmanaged ressources
+ ///
+ private void Dispose(bool disposing)
+ {
+ if(! _disposed)
+ {
+ if(disposing)
+ {
+ _trans?.Dispose();
+ Connection.Close();
+ Connection.Dispose();
+ }
+ }
+ _disposed = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt
new file mode 100644
index 0000000..90e5152
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt
@@ -0,0 +1,147 @@
+using System.Data;
+using Microsoft.Extensions.Configuration;
+using DapperTest.Repo;
+
+// =================================================================
+// DBContext implements all repo management + a small context factory
+// this file contains interfaces declaration and abstract
+// base classes for factory and DB context
+// Author: Dapper Generator
+// Context name: DbContext
+// Generated: 2022-12-01 12:46:29 UTC
+// WARNING: Never change this file manually (re-generate it)
+// =================================================================
+
+namespace DapperTest.DbContext
+{
+ public interface IDbContext : IDisposable
+ {
+ IDbConnection Connection { get; }
+ IDbTransaction? Transaction { get; }
+
+ Task OpenTransactionAsync(IsolationLevel? level = null);
+ void CommitTransaction(bool disposeTrans = true);
+ void RollbackTransaction(bool disposeTrans = true);
+
+ IClientRepo ClientRepo { get; }
+ IFailureRepo FailureRepo { get; }
+ }
+
+ ///
+ ///Interface for DbContextFactory
+ ///
+ public interface IDbContextFactory
+ {
+ IDbContext Create();
+ }
+
+ ///
+ /// Used when the DBcontext itself is not suffisent to manage its lifecycle
+ /// Very simple implementation
+ ///
+ public abstract class DbContextFactoryBase : IDbContextFactory
+ {
+ protected readonly IConfiguration _config;
+
+ public DbContextFactoryBase(IConfiguration config)
+ {
+ _config = config;
+ }
+
+ public abstract IDbContext Create();
+ }
+
+ ///
+ /// Abstract DBContext base
+ ///
+ public abstract class DbContextBase : IDbContext
+ {
+ protected readonly IConfiguration _config;
+ public abstract IDbConnection Connection {get;init;}
+
+ protected IDbTransaction? _trans = null;
+ public IDbTransaction? Transaction {
+ get => _trans;
+ }
+
+ private bool _disposed = false;
+
+ protected IClientRepo? _clientRepo;
+ public abstract IClientRepo ClientRepo { get; }
+ protected IFailureRepo? _failureRepo;
+ public abstract IFailureRepo FailureRepo { get; }
+
+ ///
+ /// Main constructor, inject standard config
+ ///
+ public DbContextBase(IConfiguration config)
+ {
+ _config = config;
+ }
+
+ ///
+ /// Open a transaction with a specified isolation level
+ ///
+ public abstract Task OpenTransactionAsync(IsolationLevel? level);
+
+ ///
+ /// Commit the current transaction, and optionally dispose all resources related to the transaction.
+ ///
+ public void CommitTransaction(bool disposeTrans = true)
+ {
+ if (_trans == null)
+ throw new NullReferenceException("DB Transaction is not present.");
+
+ _trans.Commit();
+
+ if (disposeTrans)
+ {
+ _trans.Dispose();
+ _trans = null;
+ }
+ }
+
+ ///
+ /// Rollback the transaction and all the operations linked to it, and optionally dispose all resources related to the transaction.
+ ///
+ public void RollbackTransaction(bool disposeTrans = true)
+ {
+ if (_trans == null)
+ throw new NullReferenceException("DB Transaction is not present.");
+
+ _trans.Rollback();
+
+ if (disposeTrans)
+ {
+ _trans.Dispose();
+ _trans = null;
+ }
+ }
+
+ ///
+ /// Will be call at the end of the service (ex : transient service in api net core)
+ ///
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ///
+ /// Better way to dispose if someone needs to inherit the DB context and have to dispose unmanaged ressources
+ ///
+ private void Dispose(bool disposing)
+ {
+ if(! _disposed)
+ {
+ if(disposing)
+ {
+ _trans?.Dispose();
+ Connection.Close();
+ Connection.Dispose();
+ }
+ }
+ _disposed = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt
new file mode 100644
index 0000000..3b0271d
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt
@@ -0,0 +1,47 @@
+#nullable disable warnings
+namespace DapperTest.POCO
+{
+ /// =================================================================
+ ///
+ /// Poco class for the table clients
+ /// Author: Dapper Generator
+ /// Poco: Client
+ /// Generated: 2022-12-01 12:46:29 UTC
+ /// WARNING: Never change this file manually (re-generate it)
+ ///
+ /// =================================================================
+ public class Client
+ {
+ public int Id { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string Firstname { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string Lastname { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string Address { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Comment { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public DateTime CreatedAt { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Postal { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? City { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Phone { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Email { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt
new file mode 100644
index 0000000..ed75a76
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt
@@ -0,0 +1,39 @@
+#nullable disable warnings
+namespace DapperTest.POCO
+{
+ /// =================================================================
+ ///
+ /// Poco class for the table clients
+ /// Author: Dapper Generator
+ /// Poco: Client
+ /// Generated: 2022-12-01 12:46:29 UTC
+ /// WARNING: Never change this file manually (re-generate it)
+ ///
+ /// =================================================================
+ public class Client
+ {
+ public int Id { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public string Firstname { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public string Lastname { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public string Address { get; set; }
+
+ public string? Comment { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public DateTime CreatedAt { get; set; }
+
+ public string? Postal { get; set; }
+
+ public string? City { get; set; }
+
+ public string? Phone { get; set; }
+
+ public string? Email { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt
new file mode 100644
index 0000000..43bf6a8
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt
@@ -0,0 +1,46 @@
+#nullable disable warnings
+namespace DapperTest.POCO
+{
+ /// =================================================================
+ ///
+ /// Poco class for the table clients
+ /// Author: Dapper Generator
+ /// Poco: Client
+ /// Generated: 2022-12-01 12:46:29 UTC
+ /// WARNING: Never change this file manually (re-generate it)
+ ///
+ /// =================================================================
+ public class Client
+ {
+ public int Id { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string Firstname { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public string Lastname { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string Address { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Comment { get; set; }
+
+ [System.ComponentModel.DataAnnotations.Required]
+ public DateTime CreatedAt { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Postal { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? City { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Phone { get; set; }
+
+ [System.ComponentModel.DataAnnotations.StringLength(255)]
+ public string? Email { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt
new file mode 100644
index 0000000..bc1d48e
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt
@@ -0,0 +1,57 @@
+ public virtual async Task AddAsync(IEnumerable clients)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ foreach(var client in clients)
+ {
+ var p = new DynamicParameters();
+ p.Add("@firstname", client.Firstname);
+ p.Add("@lastname", client.Lastname);
+ p.Add("@address", client.Address);
+ p.Add("@comment", client.Comment);
+ p.Add("@created_at", client.CreatedAt);
+ p.Add("@postal", client.Postal);
+ p.Add("@city", client.City);
+ p.Add("@phone", client.Phone);
+ p.Add("@email", client.Email);
+
+ var sql =
+ """
+ INSERT INTO clients
+ (
+ firstname
+ ,lastname
+ ,address
+ ,comment
+ ,created_at
+ ,postal
+ ,city
+ ,phone
+ ,email
+ )
+ VALUES
+ (
+ @firstname
+ ,@lastname
+ ,@address
+ ,@comment
+ ,@created_at
+ ,@postal
+ ,@city
+ ,@phone
+ ,@email
+ )
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt
new file mode 100644
index 0000000..756f0e1
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt
@@ -0,0 +1,22 @@
+ public virtual async Task AddAsync(DamageFailure damageFailure)
+ {
+ var p = new DynamicParameters();
+ p.Add("@damage_id", damageFailure.DamageId);
+ p.Add("@failure_id", damageFailure.FailureId);
+
+ var sql =
+ """
+ INSERT INTO damages_failures
+ (
+ damage_id
+ ,failure_id
+ )
+ VALUES
+ (
+ @damage_id
+ ,@failure_id
+ )
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt
new file mode 100644
index 0000000..73822a1
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt
@@ -0,0 +1,44 @@
+ public virtual async Task AddAsync(Client client)
+ {
+ var p = new DynamicParameters();
+ p.Add("@firstname", client.Firstname);
+ p.Add("@lastname", client.Lastname);
+ p.Add("@address", client.Address);
+ p.Add("@comment", client.Comment);
+ p.Add("@created_at", client.CreatedAt);
+ p.Add("@postal", client.Postal);
+ p.Add("@city", client.City);
+ p.Add("@phone", client.Phone);
+ p.Add("@email", client.Email);
+
+ var sql =
+ """
+ INSERT INTO clients
+ (
+ firstname
+ ,lastname
+ ,address
+ ,comment
+ ,created_at
+ ,postal
+ ,city
+ ,phone
+ ,email
+ )
+ VALUES
+ (
+ @firstname
+ ,@lastname
+ ,@address
+ ,@comment
+ ,@created_at
+ ,@postal
+ ,@city
+ ,@phone
+ ,@email
+ )
+ """;
+
+ var identity = await _dbContext.Connection.ExecuteScalarAsync(sql,p,transaction:_dbContext.Transaction);
+ return identity;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt
new file mode 100644
index 0000000..90396b2
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt
@@ -0,0 +1 @@
+ public abstract Task DeleteAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId);
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt
new file mode 100644
index 0000000..ce87063
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt
@@ -0,0 +1,13 @@
+ public virtual async Task DeleteAsync(IEnumerable listOfId)
+ {
+ var p = new DynamicParameters();
+ p.Add("@listOf",listOfId);
+
+ var sql =
+ $"""
+ DELETE FROM clients
+ WHERE id IN @listOf
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt
new file mode 100644
index 0000000..96adf97
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt
@@ -0,0 +1,15 @@
+ public virtual async Task DeleteAsync(int damageId, int failureId)
+ {
+ var p = new DynamicParameters();
+ p.Add("@damage_id",damageId);
+ p.Add("@failure_id",failureId);
+
+ var sql =
+ $"""
+ DELETE FROM damages_failures
+ WHERE damage_id = @damage_id
+ AND failure_id = @failure_id
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt
new file mode 100644
index 0000000..e7a2256
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt
@@ -0,0 +1,13 @@
+ public virtual async Task DeleteAsync(int id)
+ {
+ var p = new DynamicParameters();
+ p.Add("@id",id);
+
+ var sql =
+ $"""
+ DELETE FROM clients
+ WHERE id = @id
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt
new file mode 100644
index 0000000..eecfb5a
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt
@@ -0,0 +1,21 @@
+ public virtual async Task> GetAllAsync()
+ {
+ var sql =
+ """
+ SELECT id
+ ,firstname
+ ,lastname
+ ,address
+ ,comment
+ ,created_at
+ ,postal
+ ,city
+ ,phone
+ ,email
+ FROM clients
+ """;
+
+ var clients = await _dbContext.Connection.QueryAsync(sql,transaction:_dbContext.Transaction);
+
+ return clients;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt
new file mode 100644
index 0000000..aa73aaf
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt
@@ -0,0 +1 @@
+ public abstract Task> GetByDamageIdAndFailureIdAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId);
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt
new file mode 100644
index 0000000..2fad721
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt
@@ -0,0 +1,25 @@
+ public virtual async Task> GetByIdAsync(IEnumerable listOfId)
+ {
+ var p = new DynamicParameters();
+ p.Add("@listOf",listOfId);
+
+ var sql =
+ """
+ SELECT id
+ ,firstname
+ ,lastname
+ ,address
+ ,comment
+ ,created_at
+ ,postal
+ ,city
+ ,phone
+ ,email
+ FROM clients
+ WHERE id IN @listOf
+ """;
+
+ var clients = await _dbContext.Connection.QueryAsync(sql,p,transaction:_dbContext.Transaction);
+
+ return clients;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt
new file mode 100644
index 0000000..319731e
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt
@@ -0,0 +1,25 @@
+ public virtual async Task GetByIdAsync(int id)
+ {
+ var p = new DynamicParameters();
+ p.Add("@id",id);
+
+ var sql =
+ """
+ SELECT id
+ ,firstname
+ ,lastname
+ ,address
+ ,comment
+ ,created_at
+ ,postal
+ ,city
+ ,phone
+ ,email
+ FROM clients
+ WHERE id = @id
+ """;
+
+ var client = await _dbContext.Connection.QuerySingleOrDefaultAsync(sql,p,transaction:_dbContext.Transaction);
+
+ return client;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt
new file mode 100644
index 0000000..61fe334
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt
@@ -0,0 +1,29 @@
+ public virtual async Task GetByFirstnameAndLastnameAndAddresAsync(string firstname, string lastname, string address)
+ {
+ var p = new DynamicParameters();
+ p.Add("@firstname",firstname);
+ p.Add("@lastname",lastname);
+ p.Add("@address",address);
+
+ var sql =
+ """
+ SELECT id
+ ,firstname
+ ,lastname
+ ,address
+ ,comment
+ ,created_at
+ ,postal
+ ,city
+ ,phone
+ ,email
+ FROM clients
+ WHERE firstname = @firstname
+ AND lastname = @lastname
+ AND address = @address
+ """;
+
+ var client = await _dbContext.Connection.QuerySingleOrDefaultAsync(sql,p,transaction:_dbContext.Transaction);
+
+ return client;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt
new file mode 100644
index 0000000..af1ef0a
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt
@@ -0,0 +1,49 @@
+using DapperTest.POCO;
+using Dapper;
+using DapperTest.DbContext;
+
+// =================================================================
+// Repo class for table clients
+// Base abstract class that can be used with no specific db provider
+// You can extend it via other partial files where you know that a
+// query can run the same on different db providers
+// Author: Dapper Generator
+// Repo name: ClientRepoBase
+// Generated: 2022-12-01 12:46:29 UTC
+// WARNING: Never change this file manually (re-generate it)
+// =================================================================
+
+namespace DapperTest.Repo
+{
+ /// =================================================================
+ /// Author: Dapper Generator
+ /// Description: Interface for the repo ClientRepo
+ /// You can extend it with partial file
+ /// =================================================================
+ public partial interface IClientRepo
+ {
+ Task> GetAllAsync();
+ Task GetByIdAsync(int id);
+ Task> GetByIdAsync(IEnumerable listOfId);
+ Task> GetByIdBulkAsync(IEnumerable listOfId);
+ Task GetByFirstnameAndLastnameAndAddresAsync(string firstname, string lastname, string address);
+ Task AddAsync(Client client);
+ Task AddAsync(IEnumerable clients);
+ Task AddBulkAsync(IEnumerable clients);
+ Task UpdateAsync(Client client);
+ Task UpdateAsync(IEnumerable clients);
+ Task UpdateBulkAsync(IEnumerable clients);
+ Task DeleteAsync(int id);
+ Task DeleteAsync(IEnumerable listOfId);
+ Task DeleteBulkAsync(IEnumerable listOfId);
+ }
+
+ public abstract partial class ClientRepoBase : IClientRepo
+ {
+ protected readonly IDbContext _dbContext;
+
+ public ClientRepoBase(IDbContext dbContext)
+ {
+ _dbContext = dbContext;
+ }
+
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt
new file mode 100644
index 0000000..bcf6371
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt
@@ -0,0 +1,45 @@
+ public virtual async Task UpdateAsync(IEnumerable clients)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ foreach(var client in clients)
+ {
+ var p = new DynamicParameters();
+ p.Add("@id", client.Id);
+ p.Add("@firstname", client.Firstname);
+ p.Add("@lastname", client.Lastname);
+ p.Add("@address", client.Address);
+ p.Add("@comment", client.Comment);
+ p.Add("@created_at", client.CreatedAt);
+ p.Add("@postal", client.Postal);
+ p.Add("@city", client.City);
+ p.Add("@phone", client.Phone);
+ p.Add("@email", client.Email);
+
+ var sql =
+ """
+ UPDATE clients
+ SET firstname = @firstname
+ ,lastname = @lastname
+ ,address = @address
+ ,comment = @comment
+ ,created_at = @created_at
+ ,postal = @postal
+ ,city = @city
+ ,phone = @phone
+ ,email = @email
+ WHERE id = @id
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt
new file mode 100644
index 0000000..12d7d7e
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt
@@ -0,0 +1,31 @@
+ public virtual async Task UpdateAsync(Client client)
+ {
+ var p = new DynamicParameters();
+ p.Add("@id", client.Id);
+ p.Add("@firstname", client.Firstname);
+ p.Add("@lastname", client.Lastname);
+ p.Add("@address", client.Address);
+ p.Add("@comment", client.Comment);
+ p.Add("@created_at", client.CreatedAt);
+ p.Add("@postal", client.Postal);
+ p.Add("@city", client.City);
+ p.Add("@phone", client.Phone);
+ p.Add("@email", client.Email);
+
+ var sql =
+ """
+ UPDATE clients
+ SET firstname = @firstname
+ ,lastname = @lastname
+ ,address = @address
+ ,comment = @comment
+ ,created_at = @created_at
+ ,postal = @postal
+ ,city = @city
+ ,phone = @phone
+ ,email = @email
+ WHERE id = @id
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt
new file mode 100644
index 0000000..a62c093
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt
@@ -0,0 +1,137 @@
+using DapperTest.Repo;
+using System.Data;
+using MySqlConnector;
+using Dapper;
+using Microsoft.Extensions.Configuration;
+
+// =================================================================
+// DBContext implements all repo management + a small context factory
+// Inherits from DbContext base abstract class
+// Specific for DB provider MySql
+// Author: Dapper Generator
+// Context name: DbContext
+// Generated: 2022-12-01 12:46:29 UTC
+// WARNING: Never change this file manually (re-generate it)
+// =================================================================
+
+namespace DapperTest.DbContext
+{
+ ///
+ /// Used when the DBcontext itself is not suffisent to manage its lifecycle
+ /// Factory specific for the dbprovider MySql
+ /// Inherits from factory base
+ ///
+ public class DbContextMySqlFactory : DbContextFactoryBase, IDbContextFactory
+ {
+ public DbContextMySqlFactory(IConfiguration config) : base (config)
+ {
+ }
+
+ public override IDbContext Create()
+ {
+ return new DbContextMySql(_config);
+ }
+ }
+
+ ///
+ /// Used when the DBcontext
+ /// Specific for the dbprovider MySql
+ /// Inherits from DbContextBase
+ ///
+ public class DbContextMySql : DbContextBase, IDbContext
+ {
+ public override IDbConnection Connection {get;init;}
+
+ public override IStateRepo StateRepo
+ {
+ get {
+ _stateRepo ??= new StateRepoMySql(this);
+ return _stateRepo;
+ }
+ }
+ public override IClientRepo ClientRepo
+ {
+ get {
+ _clientRepo ??= new ClientRepoMySql(this);
+ return _clientRepo;
+ }
+ }
+ public override IRefreshTokenRepo RefreshTokenRepo
+ {
+ get {
+ _refreshTokenRepo ??= new RefreshTokenRepoMySql(this);
+ return _refreshTokenRepo;
+ }
+ }
+ public override IHistorystateRepo HistorystateRepo
+ {
+ get {
+ _historystateRepo ??= new HistorystateRepoMySql(this);
+ return _historystateRepo;
+ }
+ }
+ public override IRepairerRepo RepairerRepo
+ {
+ get {
+ _repairerRepo ??= new RepairerRepoMySql(this);
+ return _repairerRepo;
+ }
+ }
+ public override IUserRepo UserRepo
+ {
+ get {
+ _userRepo ??= new UserRepoMySql(this);
+ return _userRepo;
+ }
+ }
+ public override IDamageRepo DamageRepo
+ {
+ get {
+ _damageRepo ??= new DamageRepoMySql(this);
+ return _damageRepo;
+ }
+ }
+ public override IDamageFailureRepo DamageFailureRepo
+ {
+ get {
+ _damageFailureRepo ??= new DamageFailureRepoMySql(this);
+ return _damageFailureRepo;
+ }
+ }
+ public override IFailureRepo FailureRepo
+ {
+ get {
+ _failureRepo ??= new FailureRepoMySql(this);
+ return _failureRepo;
+ }
+ }
+
+ ///
+ /// Main constructor, inject standard config : Default connection string
+ ///
+ public DbContextMySql(IConfiguration config) : base (config)
+ {
+ DefaultTypeMap.MatchNamesWithUnderscores = true;
+ SqlMapper.Settings.CommandTimeout = 60000;
+ Connection = new MySqlConnection(_config.GetConnectionString("Default") + ";AllowLoadLocalInfile=True");
+ }
+
+ ///
+ /// Open a transaction with a specified isolation level
+ ///
+ public override async Task OpenTransactionAsync(IsolationLevel? level = null)
+ {
+ if(_trans != null)
+ throw new Exception("A transaction is already open, you need to use a new DbContext for parallel job.");
+
+ if (Connection.State == ConnectionState.Closed)
+ {
+ await ((MySqlConnection)Connection).OpenAsync();
+ }
+
+ _trans = level == null ? Connection.BeginTransaction() : Connection.BeginTransaction((IsolationLevel)level);
+
+ return _trans;
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt
new file mode 100644
index 0000000..8ef30ba
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt
@@ -0,0 +1,63 @@
+ //Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows
+ public override async Task AddBulkAsync(IEnumerable clients)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection
+ , (MySqlTransaction?)_dbContext.Transaction);
+
+ var table = new DataTable();
+ table.Columns.Add("firstname",typeof(string));
+ table.Columns.Add("lastname",typeof(string));
+ table.Columns.Add("address",typeof(string));
+ table.Columns.Add("comment",typeof(string));
+ table.Columns["comment"]!.AllowDBNull = true;
+ table.Columns.Add("created_at",typeof(DateTime));
+ table.Columns.Add("postal",typeof(string));
+ table.Columns["postal"]!.AllowDBNull = true;
+ table.Columns.Add("city",typeof(string));
+ table.Columns["city"]!.AllowDBNull = true;
+ table.Columns.Add("phone",typeof(string));
+ table.Columns["phone"]!.AllowDBNull = true;
+ table.Columns.Add("email",typeof(string));
+ table.Columns["email"]!.AllowDBNull = true;
+
+ bulkCopy.DestinationTableName = "clients";
+ bulkCopy.BulkCopyTimeout = 600;
+
+ foreach(var client in clients)
+ {
+ DataRow r = table.NewRow();
+ r["firstname"] = client.Firstname;
+ r["lastname"] = client.Lastname;
+ r["address"] = client.Address;
+ r["comment"] = client.Comment == null ? DBNull.Value : client.Comment;
+ r["created_at"] = client.CreatedAt;
+ r["postal"] = client.Postal == null ? DBNull.Value : client.Postal;
+ r["city"] = client.City == null ? DBNull.Value : client.City;
+ r["phone"] = client.Phone == null ? DBNull.Value : client.Phone;
+ r["email"] = client.Email == null ? DBNull.Value : client.Email;
+ table.Rows.Add(r);
+ }
+
+ List colMappings = new();
+ int i = 0;
+ foreach (DataColumn col in table.Columns)
+ {
+ colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ i++;
+ }
+
+ bulkCopy.ColumnMappings.AddRange(colMappings);
+
+ await bulkCopy.WriteToServerAsync(table);
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt
new file mode 100644
index 0000000..bf57b58
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt
@@ -0,0 +1,22 @@
+ public override async Task AddAsync(DamageFailure damageFailure)
+ {
+ var p = new DynamicParameters();
+ p.Add("@damage_id", damageFailure.DamageId);
+ p.Add("@failure_id", damageFailure.FailureId);
+
+ var sql =
+ """
+ INSERT INTO `damages_failures`
+ (
+ `damage_id`
+ ,`failure_id`
+ )
+ VALUES
+ (
+ @damage_id
+ ,@failure_id
+ )
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt
new file mode 100644
index 0000000..ddad4cc
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt
@@ -0,0 +1,45 @@
+ public override async Task AddAsync(Client client)
+ {
+ var p = new DynamicParameters();
+ p.Add("@firstname", client.Firstname);
+ p.Add("@lastname", client.Lastname);
+ p.Add("@address", client.Address);
+ p.Add("@comment", client.Comment);
+ p.Add("@created_at", client.CreatedAt);
+ p.Add("@postal", client.Postal);
+ p.Add("@city", client.City);
+ p.Add("@phone", client.Phone);
+ p.Add("@email", client.Email);
+
+ var sql =
+ """
+ INSERT INTO `clients`
+ (
+ `firstname`
+ ,`lastname`
+ ,`address`
+ ,`comment`
+ ,`created_at`
+ ,`postal`
+ ,`city`
+ ,`phone`
+ ,`email`
+ )
+ VALUES
+ (
+ @firstname
+ ,@lastname
+ ,@address
+ ,@comment
+ ,@created_at
+ ,@postal
+ ,@city
+ ,@phone
+ ,@email
+ );
+ SELECT LAST_INSERT_ID();
+ """;
+
+ var identity = await _dbContext.Connection.ExecuteScalarAsync(sql,p,transaction:_dbContext.Transaction);
+ return identity;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt
new file mode 100644
index 0000000..848c4f5
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt
@@ -0,0 +1,67 @@
+ //Please use this bulk by batch depending on the mem available 1000 / 1500 rows
+ public override async Task DeleteBulkAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection
+ , (MySqlTransaction?)_dbContext.Transaction);
+
+ var sqltmp =
+ $"""
+ CREATE TEMPORARY TABLE `tmp_bulkdelete_damages_failures`
+ (
+ damage_id int(11)
+ , failure_id int(11)
+ );
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);;
+
+ var table = new DataTable();
+ table.Columns.Add("damage_id",typeof(int));
+ table.Columns.Add("failure_id",typeof(int));
+ bulkCopy.DestinationTableName = "tmp_bulkdelete_damages_failures";
+ bulkCopy.BulkCopyTimeout = 600;
+
+ foreach(var identity in listOfDamageIdAndFailureId)
+ {
+ DataRow r = table.NewRow();
+ r["damage_id"] = identity.Item1;
+ r["failure_id"] = identity.Item2;
+ table.Rows.Add(r);
+ }
+
+ List colMappings = new();
+ int i = 0;
+ foreach (DataColumn col in table.Columns)
+ {
+ colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ i++;
+ }
+
+ bulkCopy.ColumnMappings.AddRange(colMappings);
+
+ await bulkCopy.WriteToServerAsync(table);
+
+ var sql =
+ """
+ DELETE t1 FROM `damages_failures` t1
+ INNER JOIN `tmp_bulkdelete_damages_failures` t2 ON
+ t1.`damage_id` = t2.`damage_id` AND t1.`failure_id` = t2.`failure_id`;
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,transaction:_dbContext.Transaction);
+
+ var sqlDrop = "DROP TABLE `tmp_bulkdelete_damages_failures`;";
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction);
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt
new file mode 100644
index 0000000..f69a0ff
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt
@@ -0,0 +1,64 @@
+ //Please use this bulk by batch depending on the mem available 1000 / 1500 rows
+ public override async Task DeleteBulkAsync(IEnumerable listOfId)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection
+ , (MySqlTransaction?)_dbContext.Transaction);
+
+ var sqltmp =
+ $"""
+ CREATE TEMPORARY TABLE `tmp_bulkdelete_clients`
+ (
+ id int(11)
+ );
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);;
+
+ var table = new DataTable();
+ table.Columns.Add("id",typeof(int));
+ bulkCopy.DestinationTableName = "tmp_bulkdelete_clients";
+ bulkCopy.BulkCopyTimeout = 600;
+
+ foreach(var identity in listOfId)
+ {
+ DataRow r = table.NewRow();
+ r["id"] = identity;
+ table.Rows.Add(r);
+ }
+
+ List colMappings = new();
+ int i = 0;
+ foreach (DataColumn col in table.Columns)
+ {
+ colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ i++;
+ }
+
+ bulkCopy.ColumnMappings.AddRange(colMappings);
+
+ await bulkCopy.WriteToServerAsync(table);
+
+ var sql =
+ """
+ DELETE t1 FROM `clients` t1
+ INNER JOIN `tmp_bulkdelete_clients` t2 ON
+ t1.`id` = t2.`id`;
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,transaction:_dbContext.Transaction);
+
+ var sqlDrop = "DROP TABLE `tmp_bulkdelete_clients`;";
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction);
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt
new file mode 100644
index 0000000..99faef0
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt
@@ -0,0 +1,5 @@
+ public override async Task DeleteAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId)
+ {/*Call bulk for composite pk*/
+
+ await DeleteBulkAsync(listOfDamageIdAndFailureId);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt
new file mode 100644
index 0000000..8b44694
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt
@@ -0,0 +1,13 @@
+ public override async Task DeleteAsync(IEnumerable listOfId)
+ {
+ var p = new DynamicParameters();
+ p.Add("@listOf",listOfId);
+
+ var sql =
+ $"""
+ DELETE FROM `clients`
+ WHERE `id` IN @listOf
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt
new file mode 100644
index 0000000..8ade6a9
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt
@@ -0,0 +1,69 @@
+ //Please use this bulk by batch depending on the mem available 1000 / 1500 rows
+ public override async Task> GetByDamageIdAndFailureIdBulkAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection
+ , (MySqlTransaction?)_dbContext.Transaction);
+
+ var sqltmp =
+ $"""
+ CREATE TEMPORARY TABLE `tmp_bulkget_damages_failures`
+ (
+ damage_id int(11)
+ , failure_id int(11)
+ );
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);;
+
+ var table = new DataTable();
+ table.Columns.Add("damage_id",typeof(int));
+ table.Columns.Add("failure_id",typeof(int));
+ bulkCopy.DestinationTableName = "tmp_bulkget_damages_failures";
+ bulkCopy.BulkCopyTimeout = 600;
+
+ foreach(var identity in listOfDamageIdAndFailureId)
+ {
+ DataRow r = table.NewRow();
+ r["damage_id"] = identity.Item1;
+ r["failure_id"] = identity.Item2;
+ table.Rows.Add(r);
+ }
+
+ List colMappings = new();
+ int i = 0;
+ foreach (DataColumn col in table.Columns)
+ {
+ colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ i++;
+ }
+
+ bulkCopy.ColumnMappings.AddRange(colMappings);
+
+ await bulkCopy.WriteToServerAsync(table);
+
+ var sql =
+ """
+ SELECT t1.`damage_id`
+ ,t1.`failure_id`
+ FROM `damages_failures` t1
+ INNER JOIN `tmp_bulkget_damages_failures` t2 ON
+ t1.`damage_id` = t2.`damage_id` AND t1.`failure_id` = t2.`failure_id`"
+ """;
+
+ var damagefailures = await _dbContext.Connection.QueryAsync(sql,transaction:_dbContext.Transaction);
+ var sqlDrop = "DROP TABLE `tmp_bulkget_damages_failures`;";
+ _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction);
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+
+ return damagefailures;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt
new file mode 100644
index 0000000..49d9bff
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt
@@ -0,0 +1,74 @@
+ //Please use this bulk by batch depending on the mem available 1000 / 1500 rows
+ public override async Task> GetByIdBulkAsync(IEnumerable listOfId)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection
+ , (MySqlTransaction?)_dbContext.Transaction);
+
+ var sqltmp =
+ $"""
+ CREATE TEMPORARY TABLE `tmp_bulkget_clients`
+ (
+ id int(11)
+ );
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);;
+
+ var table = new DataTable();
+ table.Columns.Add("id",typeof(int));
+ bulkCopy.DestinationTableName = "tmp_bulkget_clients";
+ bulkCopy.BulkCopyTimeout = 600;
+
+ foreach(var identity in listOfId)
+ {
+ DataRow r = table.NewRow();
+ r["id"] = identity;
+ table.Rows.Add(r);
+ }
+
+ List colMappings = new();
+ int i = 0;
+ foreach (DataColumn col in table.Columns)
+ {
+ colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ i++;
+ }
+
+ bulkCopy.ColumnMappings.AddRange(colMappings);
+
+ await bulkCopy.WriteToServerAsync(table);
+
+ var sql =
+ """
+ SELECT t1.`id`
+ ,t1.`firstname`
+ ,t1.`lastname`
+ ,t1.`address`
+ ,t1.`comment`
+ ,t1.`created_at`
+ ,t1.`postal`
+ ,t1.`city`
+ ,t1.`phone`
+ ,t1.`email`
+ FROM `clients` t1
+ INNER JOIN `tmp_bulkget_clients` t2 ON
+ t1.`id` = t2.`id`"
+ """;
+
+ var clients = await _dbContext.Connection.QueryAsync(sql,transaction:_dbContext.Transaction);
+ var sqlDrop = "DROP TABLE `tmp_bulkget_clients`;";
+ _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction);
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+
+ return clients;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt
new file mode 100644
index 0000000..9b5c959
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt
@@ -0,0 +1,4 @@
+ public override async Task> GetByDamageIdAndFailureIdAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId)
+ {
+ return await GetByDamageIdAndFailureIdBulkAsync(listOfDamageIdAndFailureId);
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt
new file mode 100644
index 0000000..44c14ab
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt
@@ -0,0 +1,25 @@
+ public override async Task> GetByIdAsync(IEnumerable listOfId)
+ {
+ var p = new DynamicParameters();
+ p.Add("@listOf",listOfId);
+
+ var sql =
+ """
+ SELECT `id`
+ ,`firstname`
+ ,`lastname`
+ ,`address`
+ ,`comment`
+ ,`created_at`
+ ,`postal`
+ ,`city`
+ ,`phone`
+ ,`email`
+ FROM `clients`
+ WHERE `id` IN @listOf
+ """;
+
+ var clients = await _dbContext.Connection.QueryAsync(sql,p,transaction:_dbContext.Transaction);
+
+ return clients;
+ }
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt
new file mode 100644
index 0000000..f247656
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt
@@ -0,0 +1,25 @@
+using DapperTest.POCO;
+using Dapper;
+using DapperTest.DbContext;
+using MySqlConnector;
+using System.Data;
+
+// =================================================================
+// Repo class for table clients
+// Specific repo implementation for dbprovider : MySql
+// You can extend it via other partial files where you have specific
+// queries for specific dbs (if standard SQL is not sufficent)
+// Author: Dapper Generator
+// Repo name: ClientRepoMySql
+// Generated: 2022-12-01 12:46:29 UTC
+// WARNING: Never change this file manually (re-generate it)
+// =================================================================
+
+namespace DapperTest.Repo
+{
+ public partial class ClientRepoMySql : ClientRepoBase, IClientRepo
+ {
+ public ClientRepoMySql(IDbContext dbContext): base (dbContext)
+ {
+ }
+
diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt
new file mode 100644
index 0000000..5e8ddb2
--- /dev/null
+++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt
@@ -0,0 +1,90 @@
+ //Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows
+ public override async Task UpdateBulkAsync(IEnumerable clients)
+ {
+ var isTransAlreadyOpen = _dbContext.Transaction != null;
+
+ if (!isTransAlreadyOpen)
+ await _dbContext.OpenTransactionAsync();
+
+ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection
+ , (MySqlTransaction?)_dbContext.Transaction);
+
+ var sqltmp = $"CREATE TEMPORARY TABLE `tmp_bulkupd_clients` LIKE `clients`;";
+
+ _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);
+
+ var table = new DataTable();
+ table.Columns.Add("id",typeof(int));
+ table.Columns.Add("firstname",typeof(string));
+ table.Columns.Add("lastname",typeof(string));
+ table.Columns.Add("address",typeof(string));
+ table.Columns.Add("comment",typeof(string));
+ table.Columns["comment"]!.AllowDBNull = true;
+ table.Columns.Add("created_at",typeof(DateTime));
+ table.Columns.Add("postal",typeof(string));
+ table.Columns["postal"]!.AllowDBNull = true;
+ table.Columns.Add("city",typeof(string));
+ table.Columns["city"]!.AllowDBNull = true;
+ table.Columns.Add("phone",typeof(string));
+ table.Columns["phone"]!.AllowDBNull = true;
+ table.Columns.Add("email",typeof(string));
+ table.Columns["email"]!.AllowDBNull = true;
+
+ bulkCopy.DestinationTableName = "tmp_bulkupd_clients";
+ bulkCopy.BulkCopyTimeout = 600;
+
+ foreach(var client in clients)
+ {
+ DataRow r = table.NewRow();
+ r["id"] = client.Id;
+ r["firstname"] = client.Firstname;
+ r["lastname"] = client.Lastname;
+ r["address"] = client.Address;
+ r["comment"] = client.Comment == null ? DBNull.Value : client.Comment;
+ r["created_at"] = client.CreatedAt;
+ r["postal"] = client.Postal == null ? DBNull.Value : client.Postal;
+ r["city"] = client.City == null ? DBNull.Value : client.City;
+ r["phone"] = client.Phone == null ? DBNull.Value : client.Phone;
+ r["email"] = client.Email == null ? DBNull.Value : client.Email;
+ table.Rows.Add(r);
+ }
+
+ List colMappings = new();
+ int i = 0;
+ foreach (DataColumn col in table.Columns)
+ {
+ colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));
+ i++;
+ }
+
+ bulkCopy.ColumnMappings.AddRange(colMappings);
+
+ await bulkCopy.WriteToServerAsync(table);
+
+ var sql =
+ """
+ UPDATE `clients` t1, `tmp_bulkupd_clients` t2
+ SET
+ t1.`firstname` = t2.`firstname`
+ ,t1.`lastname` = t2.`lastname`
+ ,t1.`address` = t2.`address`
+ ,t1.`comment` = t2.`comment`
+ ,t1.`created_at` = t2.`created_at`
+ ,t1.`postal` = t2.`postal`
+ ,t1.`city` = t2.`city`
+ ,t1.`phone` = t2.`phone`
+ ,t1.`email` = t2.`email`
+ WHERE t1.`id` = t2.`id`;
+ """;
+
+ _ = await _dbContext.Connection.ExecuteAsync(sql,transaction:_dbContext.Transaction);
+
+ var sqlDrop = "DROP TABLE `tmp_bulkupd_clients`;";
+ _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction);
+
+ if (!isTransAlreadyOpen)
+ {
+ _dbContext.CommitTransaction();
+ _dbContext.Connection.Close();
+ }
+ }