Skip to content

Commit e78a196

Browse files
authored
Merge pull request #133 from TrackableEntities/fix-issue-132
Revert #124 to fix #132
2 parents 8e8c5ae + 1cca158 commit e78a196

16 files changed

+193
-134
lines changed

README.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,6 @@ services.AddHandlebarsScaffolding(options =>
122122
});
123123
```
124124

125-
## Additional Partial Templates
126-
127-
You can add new partial templates to one of the `Partials` folders, then reference with the usual Handlebars syntax. For example, a file named **Comment.hbs** can be referenced from **Class.hbs**.
128-
129-
```hbs
130-
{{{> comment}}}
131-
public class {{class}}
132-
{
133-
```
134-
135125
## Custom Template Data
136126

137127
You may find it useful to add your own custom template data for use in your Handlebars templates. For example, the model namespace is not included by default in the `DbContext` class import statements. To compensate you may wish to add a `models-namespace` template to the **DbImports.hbs** template file.

sample/ScaffoldingSample/CodeTemplates/CSharpEntityType/Class.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{> imports}}
22

33
namespace {{namespace}}
4-
{ {{{> comment}}}
4+
{ // Comment
55
{{#if class-annotation}}
66
{{spaces 4}}{{{class-annotation}}}
77
{{/if}}

sample/ScaffoldingSample/CodeTemplates/CSharpEntityType/Partials/Comment.hbs

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/EntityFrameworkCore.Scaffolding.Handlebars/CSharpTemplateLanguageService.cs

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class CSharpTemplateLanguageService : ITemplateLanguageService
1212
/// Get DbContext template file information.
1313
/// </summary>
1414
/// <returns>Dictionary of templates with file information.</returns>
15-
public Dictionary<string, TemplateFileInfo> GetDbContextTemplateFileInfo(ITemplateFileService fileService)
15+
public Dictionary<string, TemplateFileInfo> GetDbContextTemplateFileInfo()
1616
{
1717
var result = new Dictionary<string, TemplateFileInfo>
1818
{
@@ -23,18 +23,48 @@ public Dictionary<string, TemplateFileInfo> GetDbContextTemplateFileInfo(ITempla
2323
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextDirectory,
2424
FileName = Constants.DbContextTemplate + Constants.TemplateExtension
2525
}
26-
}
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.DbContextOnConfiguringTemplate,
45+
new TemplateFileInfo
46+
{
47+
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextPartialsDirectory,
48+
FileName = Constants.DbContextOnConfiguringTemplate + Constants.TemplateExtension
49+
}
50+
},
51+
{
52+
Constants.DbContextDbSetsTemplate,
53+
new TemplateFileInfo
54+
{
55+
RelativeDirectory = Constants.CSharpTemplateDirectories.DbContextPartialsDirectory,
56+
FileName = Constants.DbContextDbSetsTemplate + Constants.TemplateExtension
57+
}
58+
},
2759
};
28-
29-
result = fileService.FindAllPartialTemplates(result, Constants.CSharpTemplateDirectories.DbContextPartialsDirectory);
3060
return result;
3161
}
3262

3363
/// <summary>
3464
/// Get Entities template file information.
3565
/// </summary>
3666
/// <returns>Dictionary of templates with file information.</returns>
37-
public Dictionary<string, TemplateFileInfo> GetEntitiesTemplateFileInfo(ITemplateFileService fileService)
67+
public Dictionary<string, TemplateFileInfo> GetEntitiesTemplateFileInfo()
3868
{
3969
var result = new Dictionary<string, TemplateFileInfo>
4070
{
@@ -46,9 +76,31 @@ public Dictionary<string, TemplateFileInfo> GetEntitiesTemplateFileInfo(ITemplat
4676
FileName = Constants.EntityTypeTemplate + Constants.TemplateExtension
4777
}
4878
},
79+
{
80+
Constants.EntityTypeImportTemplate,
81+
new TemplateFileInfo
82+
{
83+
RelativeDirectory = Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory,
84+
FileName = Constants.EntityTypeImportTemplate + Constants.TemplateExtension
85+
}
86+
},
87+
{
88+
Constants.EntityTypeCtorTemplate,
89+
new TemplateFileInfo
90+
{
91+
RelativeDirectory = Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory,
92+
FileName = Constants.EntityTypeCtorTemplate + Constants.TemplateExtension
93+
}
94+
},
95+
{
96+
Constants.EntityTypePropertyTemplate,
97+
new TemplateFileInfo
98+
{
99+
RelativeDirectory = Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory,
100+
FileName = Constants.EntityTypePropertyTemplate + Constants.TemplateExtension
101+
}
102+
},
49103
};
50-
51-
result = fileService.FindAllPartialTemplates(result, Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory);
52104
return result;
53105
}
54106
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<TargetFramework>netstandard2.1</TargetFramework>
55
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
6-
<Version>3.8.0</Version>
6+
<Version>3.8.1</Version>
77
<Authors>Tony Sneed</Authors>
88
<Company>Tony Sneed</Company>
99
<Title>Entity Framework Core Scaffolding with Handlebars</Title>
@@ -12,7 +12,7 @@
1212
<PackageProjectUrl>https://github.com/TrackableEntities/EntityFrameworkCore.Scaffolding.Handlebars</PackageProjectUrl>
1313
<PackageIcon>icon.png</PackageIcon>
1414
<PackageTags>scaffolding reverse-engineer entity-framework-core handlebars</PackageTags>
15-
<PackageReleaseNotes>See: https://github.com/TrackableEntities/EntityFrameworkCore.Scaffolding.Handlebars/releases/tag/v3.8.0</PackageReleaseNotes>
15+
<PackageReleaseNotes>See: https://github.com/TrackableEntities/EntityFrameworkCore.Scaffolding.Handlebars/releases/tag/v3.8.1</PackageReleaseNotes>
1616
<LangVersion>latest</LangVersion>
1717
<IncludeSource>true</IncludeSource>
1818
<SignAssembly>true</SignAssembly>
@@ -38,7 +38,7 @@
3838
</ItemGroup>
3939

4040
<ItemGroup>
41-
<!-- pack tempate files -->
41+
<!-- pack template files -->
4242
<Content Include="CodeTemplates\CSharpDbContext\DbContext.hbs" PackagePath="lib\netstandard2.1\CodeTemplates\CSharpDbContext\" />
4343
<Content Include="CodeTemplates\CSharpDbContext\Partials\DbImports.hbs" PackagePath="lib\netstandard2.1\CodeTemplates\CSharpDbContext\Partials\" />
4444
<Content Include="CodeTemplates\CSharpDbContext\Partials\DbConstructor.hbs" PackagePath="lib\netstandard2.1\CodeTemplates\CSharpDbContext\Partials\" />

src/EntityFrameworkCore.Scaffolding.Handlebars/FileSystemTemplateFileService.cs

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using System.Collections.Generic;
22
using System.IO;
3-
using System.Linq;
43
using System.Reflection;
5-
using EntityFrameworkCore.Scaffolding.Handlebars.Helpers;
64
using EntityFrameworkCore.Scaffolding.Handlebars.Internal;
75

86
namespace EntityFrameworkCore.Scaffolding.Handlebars
@@ -30,35 +28,6 @@ public virtual string[] InputFiles(params InputFile[] files)
3028
return filePaths.ToArray();
3129
}
3230

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)
39-
{
40-
return Directory.GetFiles(relativeDirectory, $"*{Constants.TemplateExtension}").Select(x => Path.GetFileNameWithoutExtension(x)).ToArray();
41-
}
42-
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-
}
61-
6231
/// <summary>
6332
/// Retreive template file contents from the file system.
6433
/// If template is not present, copy it locally.

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsDbContextTemplateService.cs

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using EntityFrameworkCore.Scaffolding.Handlebars.Helpers;
45
using Microsoft.EntityFrameworkCore.Design;
56
using HandlebarsLib = HandlebarsDotNet.Handlebars;
@@ -26,7 +27,7 @@ public class HbsDbContextTemplateService : HbsTemplateService, IDbContextTemplat
2627
public HbsDbContextTemplateService(ITemplateFileService fileService,
2728
ITemplateLanguageService languageService) : base(fileService, languageService)
2829
{
29-
DbContextTemplateFiles = LanguageService.GetDbContextTemplateFileInfo(fileService);
30+
DbContextTemplateFiles = LanguageService.GetDbContextTemplateFileInfo();
3031
}
3132

3233
/// <summary>
@@ -67,14 +68,41 @@ protected virtual Func<object, string> CompileDbContextTemplate(
6768
protected override IDictionary<string, string> GetPartialTemplates(
6869
LanguageOptions language = LanguageOptions.CSharp)
6970
{
70-
var templates = new Dictionary<string, string>();
71-
foreach(var item in DbContextTemplateFiles)
71+
DbContextTemplateFiles.TryGetValue(Constants.DbContextImportTemplate, out TemplateFileInfo importFile);
72+
var importTemplateFile = FileService.RetrieveTemplateFileContents(
73+
importFile.RelativeDirectory, importFile.FileName);
74+
75+
DbContextTemplateFiles.TryGetValue(Constants.DbContextCtorTemplate, out TemplateFileInfo ctorFile);
76+
var ctorTemplateFile = FileService.RetrieveTemplateFileContents(
77+
ctorFile.RelativeDirectory, ctorFile.FileName);
78+
79+
DbContextTemplateFiles.TryGetValue(Constants.DbContextOnConfiguringTemplate, out TemplateFileInfo onConfiguringFile);
80+
var onConfiguringTemplateFile = FileService.RetrieveTemplateFileContents(
81+
ctorFile.RelativeDirectory, onConfiguringFile.FileName);
82+
83+
DbContextTemplateFiles.TryGetValue(Constants.DbContextDbSetsTemplate, out TemplateFileInfo propertyFile);
84+
var propertyTemplateFile = FileService.RetrieveTemplateFileContents(
85+
propertyFile.RelativeDirectory, propertyFile.FileName);
86+
87+
var templates = new Dictionary<string, string>
7288
{
73-
if(item.Value.RelativeDirectory == Constants.CSharpTemplateDirectories.DbContextPartialsDirectory)
7489
{
75-
templates.Add(item.Key, FileService.RetrieveTemplateFileContents(item.Value.RelativeDirectory, item.Value.FileName));
76-
}
77-
}
90+
Constants.DbContextImportTemplate.ToLower(CultureInfo.InvariantCulture),
91+
importTemplateFile
92+
},
93+
{
94+
Constants.DbContextCtorTemplate.ToLower(CultureInfo.InvariantCulture),
95+
ctorTemplateFile
96+
},
97+
{
98+
Constants.DbContextOnConfiguringTemplate.ToLower(CultureInfo.InvariantCulture),
99+
onConfiguringTemplateFile
100+
},
101+
{
102+
Constants.DbContextDbSetsTemplate.ToLower(CultureInfo.InvariantCulture),
103+
propertyTemplateFile
104+
},
105+
};
78106
return templates;
79107
}
80108
}

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsEntityTypeTemplateService.cs

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using EntityFrameworkCore.Scaffolding.Handlebars.Helpers;
45
using Microsoft.EntityFrameworkCore.Design;
56
using HandlebarsLib = HandlebarsDotNet.Handlebars;
@@ -26,7 +27,7 @@ public class HbsEntityTypeTemplateService : HbsTemplateService, IEntityTypeTempl
2627
public HbsEntityTypeTemplateService(ITemplateFileService fileService,
2728
ITemplateLanguageService languageService) : base(fileService, languageService)
2829
{
29-
EntitiesTemplateFiles = LanguageService.GetEntitiesTemplateFileInfo(fileService);
30+
EntitiesTemplateFiles = LanguageService.GetEntitiesTemplateFileInfo();
3031
}
3132

3233
/// <summary>
@@ -67,16 +68,33 @@ protected virtual Func<object, string> CompileEntityTypeTemplate(
6768
protected override IDictionary<string, string> GetPartialTemplates(
6869
LanguageOptions language = LanguageOptions.CSharp)
6970
{
70-
71-
var templates = new Dictionary<string, string>();
72-
foreach (var item in EntitiesTemplateFiles)
71+
EntitiesTemplateFiles.TryGetValue(Constants.EntityTypeCtorTemplate, out TemplateFileInfo ctorFile);
72+
var ctorTemplateFile = FileService.RetrieveTemplateFileContents(
73+
ctorFile.RelativeDirectory, ctorFile.FileName);
74+
75+
EntitiesTemplateFiles.TryGetValue(Constants.EntityTypeImportTemplate, out TemplateFileInfo importFile);
76+
var importTemplateFile = FileService.RetrieveTemplateFileContents(
77+
importFile.RelativeDirectory, importFile.FileName);
78+
79+
EntitiesTemplateFiles.TryGetValue(Constants.EntityTypePropertyTemplate, out TemplateFileInfo propertyFile);
80+
var propertyTemplateFile = FileService.RetrieveTemplateFileContents(
81+
propertyFile.RelativeDirectory, propertyFile.FileName);
82+
83+
var templates = new Dictionary<string, string>
7384
{
74-
if (item.Value.RelativeDirectory == Constants.CSharpTemplateDirectories.EntityTypePartialsDirectory)
7585
{
76-
templates.Add(item.Key, FileService.RetrieveTemplateFileContents(item.Value.RelativeDirectory, item.Value.FileName));
77-
}
78-
}
79-
86+
Constants.EntityTypeCtorTemplate.ToLower(CultureInfo.InvariantCulture),
87+
ctorTemplateFile
88+
},
89+
{
90+
Constants.EntityTypeImportTemplate.ToLower(CultureInfo.InvariantCulture),
91+
importTemplateFile
92+
},
93+
{
94+
Constants.EntityTypePropertyTemplate.ToLower(CultureInfo.InvariantCulture),
95+
propertyTemplateFile
96+
},
97+
};
8098
return templates;
8199
}
82100
}

src/EntityFrameworkCore.Scaffolding.Handlebars/ITemplateFileService.cs

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

43
namespace EntityFrameworkCore.Scaffolding.Handlebars
54
{
@@ -25,20 +24,5 @@ public interface ITemplateFileService : IFileService
2524
/// <returns>File contents.</returns>
2625
string RetrieveTemplateFileContents(string relativeDirectory, string fileName,
2726
string altRelativeDirectory = null);
28-
29-
/// <summary>
30-
/// Retries all files from a relative directory.
31-
/// </summary>
32-
/// <param name="relativeDirectory">Relative directory name.</param>
33-
/// <returns>File names.</returns>
34-
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);
4327
}
4428
}

src/EntityFrameworkCore.Scaffolding.Handlebars/ITemplateLanguageService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ public interface ITemplateLanguageService
1111
/// Get DbContext template file information.
1212
/// </summary>
1313
/// <returns>Dictionary of templates with file information.</returns>
14-
Dictionary<string, TemplateFileInfo> GetDbContextTemplateFileInfo(ITemplateFileService fileService);
14+
Dictionary<string, TemplateFileInfo> GetDbContextTemplateFileInfo();
1515

1616
/// <summary>
1717
/// Get Entities template file information.
1818
/// </summary>
1919
/// <returns>Dictionary of templates with file information.</returns>
20-
Dictionary<string, TemplateFileInfo> GetEntitiesTemplateFileInfo(ITemplateFileService fileService);
20+
Dictionary<string, TemplateFileInfo> GetEntitiesTemplateFileInfo();
2121
}
2222
}

0 commit comments

Comments
 (0)