From 14f54aff5077e55adf6cce699f75ccbc17b8b9ea Mon Sep 17 00:00:00 2001 From: David Vreony Date: Tue, 27 Dec 2022 09:28:05 +0000 Subject: [PATCH] Dbcontextname (#330) * start of adding flexibility for naming dbcontext * update dbcontext prep based on merge * fix name generation --- .../Dhgms.Nucleotide.Analyzers.csproj | 2 +- ...EntityFrameworkDbContextGenerationModel.cs | 22 +++++++++++++ .../EntityFrameworkDbContextGenerator.cs | 2 +- ...ityFrameworkDbContextGeneratorProcessor.cs | 31 ++++++++++++------- .../ModelGenerationDetails.cs | 18 +++++++++++ .../TestEntityFrameworkDbContextGenerator.cs | 2 +- .../Dhgms.Nucleotide.UnitTests.csproj | 2 +- .../EntityFrameworkDbContextGeneratorTests.cs | 4 +-- src/Dhgms.Nucleotide/Dhgms.Nucleotide.csproj | 2 +- 9 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerationModel.cs diff --git a/src/Dhgms.Nucleotide.Analyzers/Dhgms.Nucleotide.Analyzers.csproj b/src/Dhgms.Nucleotide.Analyzers/Dhgms.Nucleotide.Analyzers.csproj index e20f0141..eb7e0662 100644 --- a/src/Dhgms.Nucleotide.Analyzers/Dhgms.Nucleotide.Analyzers.csproj +++ b/src/Dhgms.Nucleotide.Analyzers/Dhgms.Nucleotide.Analyzers.csproj @@ -1,7 +1,7 @@  - netstandard2.1 + netstandard2.0 \ No newline at end of file diff --git a/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerationModel.cs b/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerationModel.cs new file mode 100644 index 00000000..3648324e --- /dev/null +++ b/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerationModel.cs @@ -0,0 +1,22 @@ +using System; +using Dhgms.Nucleotide.Generators.GeneratorProcessors; +using Dhgms.Nucleotide.Generators.Models; +using Dhgms.Nucleotide.Generators.PropertyInfo; + +namespace Dhgms.Nucleotide.Generators.Features.EntityFramework +{ + public sealed class EntityFrameworkDbContextGenerationModel : IClassName + { + public EntityGenerationModel[] DbSetEntities + { + get; + set; + } + + public string ClassName + { + get; + set; + } + } +} diff --git a/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerator.cs b/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerator.cs index 5cdda146..5cc79519 100644 --- a/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerator.cs +++ b/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGenerator.cs @@ -10,7 +10,7 @@ namespace Dhgms.Nucleotide.Generators.Features.EntityFramework /// /// Code Generator for Entity Framework DB Context /// - public abstract class EntityFrameworkDbContextGenerator : BaseGenerator + public abstract class EntityFrameworkDbContextGenerator : BaseGenerator { /// protected override string GetNamespace() diff --git a/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGeneratorProcessor.cs b/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGeneratorProcessor.cs index b532613d..4f2ba3be 100644 --- a/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGeneratorProcessor.cs +++ b/src/Dhgms.Nucleotide.Generators/Features/EntityFramework/EntityFrameworkDbContextGeneratorProcessor.cs @@ -17,12 +17,12 @@ namespace Dhgms.Nucleotide.Generators.Features.EntityFramework /// /// Code Generator for Entity Framework DB Context /// - public sealed class EntityFrameworkDbContextGeneratorProcessor : BaseGeneratorProcessor + public sealed class EntityFrameworkDbContextGeneratorProcessor : BaseGeneratorProcessor { /// public override NamespaceDeclarationSyntax GenerateObjects( NamespaceDeclarationSyntax namespaceDeclaration, - INucleotideGenerationModel nucleotideGenerationModel) + INucleotideGenerationModel nucleotideGenerationModel) { var generationModelEntityGenerationModel = nucleotideGenerationModel.EntityGenerationModel; @@ -35,7 +35,12 @@ public sealed class EntityFrameworkDbContextGeneratorProcessor : BaseGeneratorPr var classDeclarations = new List(); var suffix = GetClassSuffix(); - classDeclarations.Add(GetClassDeclarationSyntax(generationModelEntityGenerationModel, suffix)); + + foreach (var entityFrameworkDbContextGenerationModel in generationModelEntityGenerationModel) + { + classDeclarations.Add(GetClassDeclarationSyntax(entityFrameworkDbContextGenerationModel, suffix)); + } + var usings = GetUsingDirectives(); namespaceDeclaration = namespaceDeclaration.AddUsings(usings); @@ -45,7 +50,7 @@ public sealed class EntityFrameworkDbContextGeneratorProcessor : BaseGeneratorPr return namespaceDeclaration; } - private MemberDeclarationSyntax[] GetMembers(string className, string entityName, IEntityGenerationModel[] generationModelEntityGenerationModel) + private MemberDeclarationSyntax[] GetMembers(string className, EntityGenerationModel[] generationModelEntityGenerationModel) { var result = new List(); @@ -123,7 +128,7 @@ private ConstructorDeclarationSyntax GetConstructorWithDbOptions(string classNam /// Gets the method declarations to be generated /// /// - private MemberDeclarationSyntax[] GetMethodDeclarations(IEntityGenerationModel[] generationModelEntityGenerationModel) + private MemberDeclarationSyntax[] GetMethodDeclarations(EntityGenerationModel[] generationModelEntityGenerationModel) { var results = new[] { @@ -137,13 +142,13 @@ private MemberDeclarationSyntax[] GetMethodDeclarations(IEntityGenerationModel[] /// Gets the property declarations to be generated /// /// - private PropertyDeclarationSyntax[] GetPropertyDeclarations(IEntityGenerationModel[] generationModelEntityGenerationModel) + private PropertyDeclarationSyntax[] GetPropertyDeclarations(EntityGenerationModel[] generationModelEntityGenerationModel) { return generationModelEntityGenerationModel?.Select(GetPropertyDeclaration).ToArray(); } private PropertyDeclarationSyntax GetPropertyDeclaration( - IEntityGenerationModel generationModelEntityGenerationModel) + EntityGenerationModel generationModelEntityGenerationModel) { var setType = SyntaxFactory.ParseTypeName($"Set"); var setCreation = SyntaxFactory.InvocationExpression(setType); @@ -190,12 +195,14 @@ private PropertyDeclarationSyntax[] GetPropertyDeclarations(IEntityGenerationMod // return result.ToArray(); //} - private MemberDeclarationSyntax GetClassDeclarationSyntax(IEntityGenerationModel[] generationModelEntityGenerationModel, string suffix) + private MemberDeclarationSyntax GetClassDeclarationSyntax(EntityFrameworkDbContextGenerationModel generationModelEntityGenerationModel, string suffix) { // TODO : our model needs a parent name. - var entityName = "Test"; + var entityName = generationModelEntityGenerationModel.ClassName; var className = $"{entityName}{suffix}"; - var members = GetMembers(className, entityName, generationModelEntityGenerationModel); + var members = GetMembers( + className, + generationModelEntityGenerationModel.DbSetEntities); // SyntaxFactory.Token(SyntaxKind.SealedKeyword) @@ -331,7 +338,7 @@ protected override PropertyDeclarationSyntax GetReadOnlyPropertyDeclaration(Prop return null; } - private MemberDeclarationSyntax GetOnModelCreatingMethodDeclaration(IEntityGenerationModel[] generationModelEntityGenerationModel) + private MemberDeclarationSyntax GetOnModelCreatingMethodDeclaration(EntityGenerationModel[] generationModelEntityGenerationModel) { var methodName = $"OnModelCreating"; @@ -347,7 +354,7 @@ private MemberDeclarationSyntax GetOnModelCreatingMethodDeclaration(IEntityGener return declaration; } - private StatementSyntax GetApplyConfigurationInvocationDeclaration(IEntityGenerationModel entityGenerationModel) + private StatementSyntax GetApplyConfigurationInvocationDeclaration(EntityGenerationModel entityGenerationModel) { var invokeExpression = RoslynGenerationHelpers.GetMethodOnVariableInvocationSyntax("modelBuilder", "ApplyConfiguration", diff --git a/src/Dhgms.Nucleotide.ModelTests/ModelGenerationDetails.cs b/src/Dhgms.Nucleotide.ModelTests/ModelGenerationDetails.cs index ee2b7850..43925550 100644 --- a/src/Dhgms.Nucleotide.ModelTests/ModelGenerationDetails.cs +++ b/src/Dhgms.Nucleotide.ModelTests/ModelGenerationDetails.cs @@ -90,6 +90,24 @@ public class UserEntityGenerationModel : EntityGenerationModel }; } + public class EntityFrameworkGenerationModelDetails : INucleotideGenerationModel + { + public EntityFrameworkDbContextGenerationModel[] EntityGenerationModel => + new EntityFrameworkDbContextGenerationModel[] + { + new EntityFrameworkDbContextGenerationModel + { + ClassName = "SomeProduct", + DbSetEntities = new EntityGenerationModel[] + { + new UserEntityGenerationModel(), + } + } + }; + + public string RootNamespace => "Dhgms.Nucleotide.GenerationTests"; + } + public class ModelGenerationDetails : INucleotideGenerationModel { public IEntityGenerationModel[] EntityGenerationModel => new IEntityGenerationModel[] diff --git a/src/Dhgms.Nucleotide.ModelTests/TestEntityFrameworkDbContextGenerator.cs b/src/Dhgms.Nucleotide.ModelTests/TestEntityFrameworkDbContextGenerator.cs index 59031943..af265495 100644 --- a/src/Dhgms.Nucleotide.ModelTests/TestEntityFrameworkDbContextGenerator.cs +++ b/src/Dhgms.Nucleotide.ModelTests/TestEntityFrameworkDbContextGenerator.cs @@ -11,6 +11,6 @@ namespace Dhgms.Nucleotide.ModelTests [Generator] public sealed class TestEntityFrameworkDbContextGenerator : EntityFrameworkDbContextGenerator { - protected override INucleotideGenerationModel NucleotideGenerationModel => new ModelGenerationDetails(); + protected override INucleotideGenerationModel NucleotideGenerationModel => new EntityFrameworkGenerationModelDetails(); } } diff --git a/src/Dhgms.Nucleotide.UnitTests/Dhgms.Nucleotide.UnitTests.csproj b/src/Dhgms.Nucleotide.UnitTests/Dhgms.Nucleotide.UnitTests.csproj index 0aaa9e72..f53272ae 100644 --- a/src/Dhgms.Nucleotide.UnitTests/Dhgms.Nucleotide.UnitTests.csproj +++ b/src/Dhgms.Nucleotide.UnitTests/Dhgms.Nucleotide.UnitTests.csproj @@ -1,7 +1,7 @@  - netcoreapp5.0 + netcoreapp6.0 false full True diff --git a/src/Dhgms.Nucleotide.UnitTests/Generators/Features/EntityFrameworkDbContextGeneratorTests.cs b/src/Dhgms.Nucleotide.UnitTests/Generators/Features/EntityFrameworkDbContextGeneratorTests.cs index b04075f5..ce9d5bc4 100644 --- a/src/Dhgms.Nucleotide.UnitTests/Generators/Features/EntityFrameworkDbContextGeneratorTests.cs +++ b/src/Dhgms.Nucleotide.UnitTests/Generators/Features/EntityFrameworkDbContextGeneratorTests.cs @@ -15,7 +15,7 @@ namespace Dhgms.Nucleotide.UnitTests.Generators [ExcludeFromCodeCoverage] public static class EntityFrameworkDbContextGeneratorTests { - public sealed class ConstructorMethod : BaseGeneratorTests.BaseConstructorMethod + public sealed class ConstructorMethod : BaseGeneratorTests.BaseConstructorMethod { public ConstructorMethod(ITestOutputHelper output) : base(output) { @@ -27,7 +27,7 @@ public ConstructorMethod(ITestOutputHelper output) : base(output) } } - public sealed class GenerateAsyncMethod : BaseGeneratorTests.BaseGenerateAsyncMethod + public sealed class GenerateAsyncMethod : BaseGeneratorTests.BaseGenerateAsyncMethod { public GenerateAsyncMethod(ITestOutputHelper output) : base(output) { diff --git a/src/Dhgms.Nucleotide/Dhgms.Nucleotide.csproj b/src/Dhgms.Nucleotide/Dhgms.Nucleotide.csproj index 50b7faff..6504acab 100644 --- a/src/Dhgms.Nucleotide/Dhgms.Nucleotide.csproj +++ b/src/Dhgms.Nucleotide/Dhgms.Nucleotide.csproj @@ -1,6 +1,6 @@  - netcoreapp5.0 + netstandard2.0 full True