Skip to content

Commit 6e3264e

Browse files
Arnaud BoussaerArnaud Boussaer
authored andcommitted
loresoft#560 Add option to delete unused files
1 parent 83aa54c commit 6e3264e

File tree

7 files changed

+47
-0
lines changed

7 files changed

+47
-0
lines changed

src/EntityFrameworkCore.Generator.Core/CodeGenerator.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ private void GenerateQueryExtensions(EntityContext entityContext)
9090

9191
private void GenerateMappingClasses(EntityContext entityContext)
9292
{
93+
if (Options.Data.Mapping.DeleteUnusedFiles)
94+
DeleteUnusedFiles(Options.Data.Mapping.Directory, entityContext.Entities.Select(e => e.MappingClass).ToHashSet(), "mapping");
95+
9396
foreach (var entity in entityContext.Entities)
9497
{
9598
Options.Variables.Set(entity);
@@ -111,6 +114,9 @@ private void GenerateMappingClasses(EntityContext entityContext)
111114

112115
private void GenerateEntityClasses(EntityContext entityContext)
113116
{
117+
if (Options.Data.Entity.DeleteUnusedFiles)
118+
DeleteUnusedFiles(Options.Data.Entity.Directory, entityContext.Entities.Select(e => e.EntityClass).ToHashSet(), "entity");
119+
114120
foreach (var entity in entityContext.Entities)
115121
{
116122
Options.Variables.Set(entity);
@@ -130,6 +136,20 @@ private void GenerateEntityClasses(EntityContext entityContext)
130136
}
131137
}
132138

139+
private void DeleteUnusedFiles(string directory, HashSet<string> fileNamesToBeGenerated, string fileType)
140+
{
141+
var existingFiles = Directory.EnumerateFiles(directory, "*.cs");
142+
foreach (var existingFile in existingFiles)
143+
{
144+
var fileName = Path.GetFileNameWithoutExtension(existingFile);
145+
if (!fileNamesToBeGenerated.Contains(fileName))
146+
{
147+
_logger.LogInformation("Deleting {fileType} class: {file}.cs", fileType, fileName);
148+
File.Delete(existingFile);
149+
}
150+
}
151+
}
152+
133153
private void GenerateDataContext(EntityContext entityContext)
134154
{
135155

src/EntityFrameworkCore.Generator.Core/OptionMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ private static void MapMapping(MappingClassOptions option, MappingClass mapping)
145145

146146
option.Temporal = mapping.Temporal;
147147
option.RowVersion = mapping.RowVersion;
148+
option.DeleteUnusedFiles = mapping.DeleteUnusedFiles;
148149
}
149150

150151
private static void MapEntity(EntityClassOptions option, EntityClass entity)
@@ -154,6 +155,7 @@ private static void MapEntity(EntityClassOptions option, EntityClass entity)
154155
option.EntityNaming = entity.EntityNaming;
155156
option.RelationshipNaming = entity.RelationshipNaming;
156157
option.PrefixWithSchemaName = entity.PrefixWithSchemaName;
158+
option.DeleteUnusedFiles = entity.DeleteUnusedFiles;
157159

158160
MapSelection(option.Renaming, entity.Renaming);
159161
}

src/EntityFrameworkCore.Generator.Core/Options/EntityClassOptions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,10 @@ public EntityClassOptions(VariableDictionary variables, string prefix)
5555
/// The renaming expressions.
5656
/// </value>
5757
public SelectionOptions Renaming { get; }
58+
59+
/// <summary>
60+
/// If true, files without a corresponding database table will be removed in the folder
61+
/// </summary>
62+
[DefaultValue(false)]
63+
public bool DeleteUnusedFiles { get; set; }
5864
}

src/EntityFrameworkCore.Generator.Core/Options/MappingClassOptions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,9 @@ public MappingClassOptions(VariableDictionary variables, string prefix)
3838
[DefaultValue(RowVersionMapping.ByteArray)]
3939
public RowVersionMapping RowVersion { get; set; } = RowVersionMapping.ByteArray;
4040

41+
/// <summary>
42+
/// If true, files without a corresponding database table will be removed in the folder
43+
/// </summary>
44+
[DefaultValue(false)]
45+
public bool DeleteUnusedFiles { get; set; }
4146
}

src/EntityFrameworkCore.Generator.Core/Serialization/EntityClass.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,10 @@ public EntityClass()
5454
/// The renaming expressions.
5555
/// </value>
5656
public SelectionModel Renaming { get; set; }
57+
58+
/// <summary>
59+
/// If true, files without a corresponding database table will be removed in the folder
60+
/// </summary>
61+
[DefaultValue(false)]
62+
public bool DeleteUnusedFiles { get; set; }
5763
}

src/EntityFrameworkCore.Generator.Core/Serialization/MappingClass.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,10 @@ public MappingClass()
3838
[DefaultValue(RowVersionMapping.ByteArray)]
3939
public RowVersionMapping RowVersion { get; set; } = RowVersionMapping.ByteArray;
4040

41+
/// <summary>
42+
/// If true, files without a corresponding database table will be removed in the folder
43+
/// </summary>
44+
[DefaultValue(false)]
45+
public bool DeleteUnusedFiles { get; set; }
46+
4147
}

test/EntityFrameworkCore.Generator.Core.Tests/Options/full.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ data:
3434
relationshipNaming: Plural
3535
document: false
3636
prefixWithSchemaName: false
37+
deleteUnusedFiles: false
3738
renaming:
3839
entities:
3940
- ^(sp|tbl|udf|vw)_
@@ -43,6 +44,7 @@ data:
4344
namespace: '{Project.Namespace}.Data.Mapping'
4445
directory: '{Project.Directory}\Data\Mapping'
4546
document: false
47+
deleteUnusedFiles: false
4648
query:
4749
generate: true
4850
indexPrefix: By

0 commit comments

Comments
 (0)