Skip to content

Commit 0ddf2be

Browse files
gertjantsAnthony Sneed
authored andcommitted
Adding partial template support.
This adds partial template support, allows for override and moves the OnConfiguring to the partials folder to allow for more code generation and overrides.
1 parent 9133488 commit 0ddf2be

File tree

11 files changed

+110
-135
lines changed

11 files changed

+110
-135
lines changed

src/EntityFrameworkCore.Scaffolding.Handlebars/CSharpTemplateLanguageService.cs

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,10 @@ public Dictionary<string, TemplateFileInfo> GetDbContextTemplateFileInfo(ITempla
2323
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextDirectory,
2424
FileName = Constants.DbContextTemplate + Constants.TemplateExtension
2525
}
26-
},
27-
{
28-
Constants.DbContextImportTemplate,
29-
new TemplateFileInfo
30-
{
31-
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextPartialsDirectory,
32-
FileName = Constants.DbContextImportTemplate + Constants.TemplateExtension
33-
}
34-
},
35-
{
36-
Constants.DbContextCtorTemplate,
37-
new TemplateFileInfo
38-
{
39-
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextPartialsDirectory,
40-
FileName = Constants.DbContextCtorTemplate + Constants.TemplateExtension
41-
}
42-
},
43-
{
44-
Constants.DbContextDbSetsTemplate,
45-
new TemplateFileInfo
46-
{
47-
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextPartialsDirectory,
48-
FileName = Constants.DbContextDbSetsTemplate + Constants.TemplateExtension
49-
}
50-
},
26+
}
5127
};
5228

29+
result = fileService.FindAllPartialTemplates(result, Constants.CSharpTemplateDirectories.DbContextPartialsDirectory);
5330
return result;
5431
}
5532

@@ -70,16 +47,8 @@ public Dictionary<string, TemplateFileInfo> GetEntitiesTemplateFileInfo(ITemplat
7047
}
7148
},
7249
};
73-
74-
foreach(var file in fileService.RetrieveAllFileNames(Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory))
75-
{
76-
result.Add(file, new TemplateFileInfo()
77-
{
78-
RelativeDirectory = Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory,
79-
FileName = file + Constants.TemplateExtension
80-
});
81-
}
8250

51+
result = fileService.FindAllPartialTemplates(result, Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory);
8352
return result;
8453
}
8554
}

src/EntityFrameworkCore.Scaffolding.Handlebars/CodeTemplates/CSharpDbContext/DbContext.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ namespace {{namespace}}
1414

1515
{{{> dbconstructor}}}
1616

17-
{{{on-configuring}}}
17+
{{{> dbonconfiguring}}}
18+
1819
{{{on-model-creating}}}
1920
}
2021
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{{spaces 8}}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
2+
{{spaces 8}}{
3+
{{spaces 12}}if (!optionsBuilder.IsConfigured)
4+
{{spaces 12}}{
5+
{{#if suppress-connectionstring-warning}}
6+
{{spaces 16}}{{sensitive-information-warning}}
7+
{{/if}}
8+
{{spaces 16}}optionsBuilder{{options-builder-provider}};
9+
{{spaces 11}} }
10+
{{spaces 7}} }

src/EntityFrameworkCore.Scaffolding.Handlebars/CodeTemplates/TypeScriptDbContext/DbContext.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ namespace {{namespace}}
1414

1515
{{{> dbconstructor}}}
1616

17-
{{{on-configuring}}}
17+
{{{> dbonconfiguring}}}
18+
1819
{{{on-model-creating}}}
1920
}
2021
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{{spaces 8}}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
2+
{{spaces 8}}{
3+
{{spaces 12}}if (!optionsBuilder.IsConfigured)
4+
{{spaces 12}}{
5+
{{#if suppress-connectionstring-warning}}
6+
{{spaces 16}}{{sensitive-information-warning}}
7+
{{/if}}
8+
{{spaces 16}}optionsBuilder{{options-builder-provider}};
9+
{{spaces 11}} }
10+
{{spaces 7}} }

src/EntityFrameworkCore.Scaffolding.Handlebars/EntityFrameworkCore.Scaffolding.Handlebars.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
<None Update="CodeTemplates\CSharpDbContext\Partials\DbConstructor.hbs">
7575
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
7676
</None>
77+
<None Update="CodeTemplates\CSharpDbContext\Partials\DbOnConfiguring.hbs">
78+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
79+
</None>
7780
<None Update="CodeTemplates\CSharpDbContext\Partials\DbSets.hbs">
7881
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
7982
</None>
@@ -98,6 +101,9 @@
98101
<None Update="CodeTemplates\TypeScriptDbContext\Partials\DbConstructor.hbs">
99102
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
100103
</None>
104+
<None Update="CodeTemplates\TypeScriptDbContext\Partials\DbOnConfiguring.hbs">
105+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
106+
</None>
101107
<None Update="CodeTemplates\TypeScriptDbContext\Partials\DbSets.hbs">
102108
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
103109
</None>

src/EntityFrameworkCore.Scaffolding.Handlebars/FileSystemTemplateFileService.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.IO;
33
using System.Linq;
44
using System.Reflection;
5+
using EntityFrameworkCore.Scaffolding.Handlebars.Helpers;
56
using EntityFrameworkCore.Scaffolding.Handlebars.Internal;
67

78
namespace EntityFrameworkCore.Scaffolding.Handlebars
@@ -29,11 +30,34 @@ public virtual string[] InputFiles(params InputFile[] files)
2930
return filePaths.ToArray();
3031
}
3132

32-
public string[] RetrieveAllFileNames(string relativeDirectory)
33+
/// <summary>
34+
/// Find all files in relative directory
35+
/// </summary>
36+
/// <param name="relativeDirectory">Relative Directory.</param>
37+
/// <returns></returns>
38+
public virtual string[] RetrieveAllFileNames(string relativeDirectory)
3339
{
34-
return Directory.GetFiles(relativeDirectory).Select(x => Path.GetFileNameWithoutExtension(x)).ToArray();
40+
return Directory.GetFiles(relativeDirectory, $"*.{Constants.TemplateExtension}").Select(x => Path.GetFileNameWithoutExtension(x)).ToArray();
3541
}
3642

43+
/// <summary>
44+
/// Finds all partial templates
45+
/// </summary>
46+
/// <param name="result">Dictionary containing template info</param>
47+
/// <param name="relativeDirectory">Relative Directory.</param>
48+
/// <returns></returns>
49+
public virtual Dictionary<string, TemplateFileInfo> FindAllPartialTemplates(Dictionary<string, TemplateFileInfo> result, string relativeDirectory)
50+
{
51+
foreach (var file in RetrieveAllFileNames(relativeDirectory))
52+
{
53+
result.Add(file, new TemplateFileInfo()
54+
{
55+
RelativeDirectory = relativeDirectory,
56+
FileName = file + Constants.TemplateExtension
57+
});
58+
}
59+
return result;
60+
}
3761

3862
/// <summary>
3963
/// Retreive template file contents from the file system.

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsCSharpDbContextGenerator.cs

Lines changed: 11 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -162,55 +162,20 @@ protected override void GenerateOnConfiguring(string connectionString, bool supp
162162
{
163163
Check.NotNull(connectionString, nameof(connectionString));
164164

165-
var sb = new IndentedStringBuilder();
166-
using (sb.Indent())
167-
using (sb.Indent())
168-
{
169-
sb.AppendLine("protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)");
170-
sb.AppendLine("{");
171-
172-
using (sb.Indent())
173-
{
174-
sb.AppendLine("if (!optionsBuilder.IsConfigured)");
175-
sb.AppendLine("{");
176-
177-
using (sb.Indent())
178-
{
179-
if (!suppressConnectionStringWarning)
180-
{
181-
sb.DecrementIndent()
182-
.DecrementIndent()
183-
.DecrementIndent()
184-
.DecrementIndent()
185-
.AppendLine("#warning " + DesignStrings.SensitiveInformationWarning)
186-
.IncrementIndent()
187-
.IncrementIndent()
188-
.IncrementIndent()
189-
.IncrementIndent();
190-
}
191-
192-
sb.Append("optionsBuilder");
193-
194-
var useProviderCall = ProviderConfigurationCodeGenerator.GenerateUseProvider(
195-
connectionString,
196-
ProviderConfigurationCodeGenerator.GenerateProviderOptions());
197-
var contextOptions = ProviderConfigurationCodeGenerator.GenerateContextOptions();
198-
if (contextOptions != null)
199-
{
200-
useProviderCall = useProviderCall.Chain(contextOptions);
201-
}
165+
TemplateData.Add("connection-string", connectionString);
166+
TemplateData.Add("suppress-connectionstring-warning", suppressConnectionStringWarning);
167+
TemplateData.Add("sensitive-information-warning", $"#warning {DesignStrings.SensitiveInformationWarning}");
202168

203-
sb.Append(CSharpHelper.Fragment(useProviderCall))
204-
.AppendLine(";");
205-
}
206-
sb.AppendLine("}");
207-
}
208-
209-
sb.AppendLine("}");
169+
var useProviderCall = ProviderConfigurationCodeGenerator.GenerateUseProvider(
170+
connectionString,
171+
ProviderConfigurationCodeGenerator.GenerateProviderOptions());
172+
var contextOptions = ProviderConfigurationCodeGenerator.GenerateContextOptions();
173+
if (contextOptions != null)
174+
{
175+
useProviderCall = useProviderCall.Chain(contextOptions);
210176
}
211177

212-
var onConfiguring = sb.ToString();
213-
TemplateData.Add("on-configuring", onConfiguring);
178+
TemplateData.Add("options-builder-provider", CSharpHelper.Fragment(useProviderCall));
214179
}
215180

216181
/// <summary>

src/EntityFrameworkCore.Scaffolding.Handlebars/ITemplateFileService.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using EntityFrameworkCore.Scaffolding.Handlebars.Internal;
2+
using System.Collections.Generic;
23

34
namespace EntityFrameworkCore.Scaffolding.Handlebars
45
{
@@ -25,7 +26,19 @@ public interface ITemplateFileService : IFileService
2526
string RetrieveTemplateFileContents(string relativeDirectory, string fileName,
2627
string altRelativeDirectory = null);
2728

28-
29+
/// <summary>
30+
/// Retries all files from a relative directory.
31+
/// </summary>
32+
/// <param name="relativeDirectory">Relative directory name.</param>
33+
/// <returns></returns>
2934
string[] RetrieveAllFileNames(string relativeDirectory);
35+
36+
/// <summary>
37+
/// Finds all partial templates
38+
/// </summary>
39+
/// <param name="result">Dictionary containing template info</param>
40+
/// <param name="relativeDirectory">Relative Directory.</param>
41+
/// <returns></returns>
42+
Dictionary<string, TemplateFileInfo> FindAllPartialTemplates(Dictionary<string, TemplateFileInfo> result, string relativeDirectory);
3043
}
3144
}

src/EntityFrameworkCore.Scaffolding.Handlebars/InMemoryTemplateFileService.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.IO;
33
using System.Linq;
4+
using EntityFrameworkCore.Scaffolding.Handlebars.Helpers;
45
using EntityFrameworkCore.Scaffolding.Handlebars.Internal;
56

67
namespace EntityFrameworkCore.Scaffolding.Handlebars
@@ -45,6 +46,25 @@ public string[] RetrieveAllFileNames(string relativeDirectory)
4546
return filesMap.Select(x=> x.Key).ToArray();
4647
}
4748

49+
/// <summary>
50+
/// Finds all partial templates
51+
/// </summary>
52+
/// <param name="result">Dictionary containing template info</param>
53+
/// <param name="relativeDirectory">Relative Directory.</param>
54+
/// <returns></returns>
55+
public virtual Dictionary<string, TemplateFileInfo> FindAllPartialTemplates(Dictionary<string, TemplateFileInfo> result, string relativeDirectory)
56+
{
57+
foreach (var file in RetrieveAllFileNames(relativeDirectory))
58+
{
59+
result.Add(file, new TemplateFileInfo()
60+
{
61+
RelativeDirectory = relativeDirectory,
62+
FileName = file + Constants.TemplateExtension
63+
});
64+
}
65+
return result;
66+
}
67+
4868
/// <summary>
4969
/// Retrieve template file contents from the file system.
5070
/// If template is not present, copy it locally.

0 commit comments

Comments
 (0)