Skip to content
This repository has been archived by the owner on Jan 16, 2024. It is now read-only.

Commit

Permalink
Issue 149
Browse files Browse the repository at this point in the history
  • Loading branch information
msawczyn committed Feb 17, 2020
1 parent bc6a78d commit af17f6c
Show file tree
Hide file tree
Showing 36 changed files with 719 additions and 54 deletions.
11 changes: 6 additions & 5 deletions src/DslPackage/TextTemplates/EF6Designer.ttinclude
Expand Up @@ -18,33 +18,34 @@
void GenerateEF6(Manager manager, ModelRoot modelRoot)
{
// Entities
string fileNameMarker = string.IsNullOrEmpty(modelRoot.FileNameMarker) ? string.Empty : $".{modelRoot.FileNameMarker}";

foreach (ModelClass modelClass in modelRoot.Classes.Where(e => e.GenerateCode))
{
manager.StartNewFile(Path.Combine(modelClass.EffectiveOutputDirectory, $"{modelClass.Name}.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelClass.EffectiveOutputDirectory, $"{modelClass.Name}{fileNameMarker}.cs"));
WriteClass(modelClass);
}

// Enums

foreach (ModelEnum modelEnum in modelRoot.Enums.Where(e => e.GenerateCode))
{
manager.StartNewFile(Path.Combine(modelEnum.EffectiveOutputDirectory, $"{modelEnum.Name}.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelEnum.EffectiveOutputDirectory, $"{modelEnum.Name}{fileNameMarker}.cs"));
WriteEnum(modelEnum);
}

// Context

if (modelRoot.DatabaseInitializerType != DatabaseInitializerKind.None)
{
manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DatabaseInitializer.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DatabaseInitializer{fileNameMarker}.cs"));
WriteDatabaseInitializerEF6(modelRoot);
}

manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DbMigrationConfiguration.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DbMigrationConfiguration{fileNameMarker}.cs"));
WriteMigrationConfigurationEF6(modelRoot);

manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}{fileNameMarker}.cs"));
WriteDbContextEF6(modelRoot);
}

Expand Down
11 changes: 6 additions & 5 deletions src/DslPackage/TextTemplates/EFCoreDesigner.ttinclude
Expand Up @@ -18,30 +18,31 @@
void GenerateEFCore(Manager manager, ModelRoot modelRoot)
{
// Entities
string fileNameMarker = string.IsNullOrEmpty(modelRoot.FileNameMarker) ? string.Empty : $".{modelRoot.FileNameMarker}";

foreach (ModelClass modelClass in modelRoot.Classes.Where(e => e.GenerateCode))
{
manager.StartNewFile(Path.Combine(modelClass.EffectiveOutputDirectory, $"{modelClass.Name}.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelClass.EffectiveOutputDirectory, $"{modelClass.Name}{fileNameMarker}.cs"));
WriteClass(modelClass);
}

// Enums

foreach (ModelEnum modelEnum in modelRoot.Enums.Where(e => e.GenerateCode))
{
manager.StartNewFile(Path.Combine(modelEnum.EffectiveOutputDirectory, $"{modelEnum.Name}.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelEnum.EffectiveOutputDirectory, $"{modelEnum.Name}{fileNameMarker}.cs"));
WriteEnum(modelEnum);
}

// DatabaseInitializer not yet supported in EF Core
// manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DatabaseInitializer.{modelRoot.FileNameMarker}.cs"));
// manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DatabaseInitializer{fileNameMarker}.cs"));
// WriteDatabaseInitializerEFCore(modelRoot);

// MigrationConfiguration not yet supported in EF Core
// manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DbMigrationConfiguration.{modelRoot.FileNameMarker}.cs"));
// manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}DbMigrationConfiguration{fileNameMarker}.cs"));
// WriteMigrationConfigurationEFCore(modelRoot);

manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}.{modelRoot.FileNameMarker}.cs"));
manager.StartNewFile(Path.Combine(modelRoot.ContextOutputDirectory, $"{modelRoot.EntityContainerName}{fileNameMarker}.cs"));
WriteDbContextEFCore(modelRoot);
}

Expand Down
3 changes: 2 additions & 1 deletion src/DslPackage/TextTemplates/MultipleOutputHelper.ttinclude
Expand Up @@ -297,7 +297,8 @@ class Manager
Dictionary<ProjectItem, List<string>> result = new Dictionary<ProjectItem, List<string>>();
Project currentProject = templateProjectItem.ContainingProject;
string projectDirectory = Path.GetDirectoryName(currentProject.FullName);
string[] existingGeneratedFiles = Directory.GetFiles(projectDirectory, $"*.{FileNameMarker}.cs", SearchOption.AllDirectories);
string fileNameMarker = string.IsNullOrEmpty(modelRoot.FileNameMarker) ? string.Empty : $".{modelRoot.FileNameMarker}";
string[] existingGeneratedFiles = Directory.GetFiles(projectDirectory, $"*{fileNameMarker}.cs", SearchOption.AllDirectories);

foreach (string fileName in existingGeneratedFiles)
{
Expand Down
17 changes: 12 additions & 5 deletions src/Testing/Sandbox/Sandbox_EF6/EFModel1.efmodel
Expand Up @@ -3,15 +3,22 @@
<classes>
<modelRootHasClasses Id="88c936e9-6849-499e-8319-77742d4da9b7">
<modelClass Id="64e2f69f-62f8-4b50-a9e2-b6eae1a07949" tableName="Entity1" databaseSchema="dbo" namespace="Sandbox" dbSetName="Entity1" name="Entity1" outputDirectory="Generated\Entities">
<unidirectionalTargets>
<unidirectionalAssociation Id="58aeddc4-7f35-4fc0-aab3-db86ceff8fe7" sourceMultiplicity="ZeroMany" targetMultiplicity="One" targetPropertyName="Entity2" collectionClass="HashSet" sourceRole="Dependent" targetRole="Principal" foreignKeyLocation="None" targetImplementNotify="false">
<modelClassMoniker Id="7cb4f34c-b77a-40a9-92e9-c24d142c0c39" />
</unidirectionalAssociation>
</unidirectionalTargets>
<attributes>
<modelAttribute Id="8e0e2abc-3583-46f4-9c7d-4dfcd618cede" type="Int32" isIdentity="true" required="true" maxLength="" indexed="true" indexedUnique="true" stringType="None" identityType="AutoGenerated" name="Id" autoProperty="true" minLength="0" columnName="Id" columnType="default" implementNotify="false" />
</attributes>
</modelClass>
</modelRootHasClasses>
<modelRootHasClasses Id="bcb4602e-2548-4270-8145-de3c136cfc45">
<modelClass Id="7cb4f34c-b77a-40a9-92e9-c24d142c0c39" tableName="Entity2" databaseSchema="dbo" namespace="Sandbox" dbSetName="Entity2" name="Entity2" outputDirectory="Generated\Entities">
<attributes>
<modelAttribute Id="5e911ab2-e88a-44f3-a310-048a5a16880b" type="Int32" isIdentity="true" required="true" maxLength="" indexed="true" indexedUnique="true" stringType="None" identityType="AutoGenerated" name="Id" autoProperty="true" minLength="0" columnName="Id" columnType="default" implementNotify="false" />
</attributes>
</modelClass>
</modelRootHasClasses>
</classes>
<diagrams>
<modelRootHasModelDiagrams Id="8f0a7659-cff5-4f4b-9f69-7a5a2c813161">
<modelDiagramData name="EFModel1" />
</modelRootHasModelDiagrams>
</diagrams>
</modelRoot>
30 changes: 30 additions & 0 deletions src/Testing/Sandbox/Sandbox_EF6/EFModel1.efmodel.diagram
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<eFModelDiagram dslVersion="2.0.0.0" Id="34e7d6a0-1101-4b53-a747-755e7aab5d19" absoluteBounds="0, 0, 11, 8.5" name="EFModel1">
<modelRootMoniker Id="cba47279-0950-4257-bb2c-e4d5e72a52a4" />
<nestedChildShapes>
<classShape Id="89178a88-5705-41cb-b3ec-dd71d3813e23" absoluteBounds="0.5, 1.25, 1.5, 1.5627718098958332" fillColor="0, 122, 204" textColor="White" outlineColor="Black" outlineDashStyle="Solid" visible="true" outlineThickness="0.01">
<modelClassMoniker Id="64e2f69f-62f8-4b50-a9e2-b6eae1a07949" />
<nestedChildShapes>
<elementListCompartment Id="0c3e9b01-3d4c-47d4-a7e7-ccb60c6f2f0b" absoluteBounds="0.515, 1.56, 1.4700000000000002, 0.44169108072916657" name="AttributesCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="3334d597-b0e8-4409-bf67-010806925e37" absoluteBounds="0.515, 2.0116910807291664, 1.4700000000000002, 0.44169108072916663" name="AssociationsCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="2c469a14-f7e4-402b-a612-c203584570bb" absoluteBounds="0.515, 2.4633821614583331, 1.4700000000000002, 0.2493896484375" name="SourcesCompartment" titleTextColor="Black" itemTextColor="Black" />
</nestedChildShapes>
</classShape>
<classShape Id="40a92789-8edd-4474-b88e-2a26ec5de039" absoluteBounds="3.625, 1.375, 1.5, 1.3704703776041667" fillColor="0, 122, 204" textColor="White" outlineColor="Black" outlineDashStyle="Solid" visible="true" outlineThickness="0.01">
<modelClassMoniker Id="7cb4f34c-b77a-40a9-92e9-c24d142c0c39" />
<nestedChildShapes>
<elementListCompartment Id="9c965633-8584-43f7-98b1-8eb2c4057f89" absoluteBounds="3.6399999999999997, 1.685, 1.4700000000000002, 0.44169108072916657" name="AttributesCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="745964dd-3162-4f1a-8d19-576260ec0137" absoluteBounds="3.6399999999999997, 2.1366910807291664, 1.4700000000000002, 0.2493896484375" name="AssociationsCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="6972e072-6c84-42e8-b694-dd68aecd7587" absoluteBounds="3.6399999999999997, 2.3960807291666666, 1.4700000000000002, 0.2493896484375" name="SourcesCompartment" titleTextColor="Black" itemTextColor="Black" />
</nestedChildShapes>
</classShape>
<unidirectionalConnector Id="726f4bb8-1bb7-4222-b354-9ab2269cee2b" edgePoints="[(2 : 2.06023518880208); (3.625 : 2.06023518880208)]" fixedFrom="Algorithm" fixedTo="Algorithm" color="113, 111, 110" dashStyle="Solid">
<unidirectionalAssociationMoniker Id="58aeddc4-7f35-4fc0-aab3-db86ceff8fe7" />
<relativeChildShapes />
<nodes>
<classShapeMoniker Id="89178a88-5705-41cb-b3ec-dd71d3813e23" />
<classShapeMoniker Id="40a92789-8edd-4474-b88e-2a26ec5de039" />
</nodes>
</unidirectionalConnector>
</nestedChildShapes>
</eFModelDiagram>
Binary file not shown.
3 changes: 3 additions & 0 deletions src/Testing/Sandbox/Sandbox_EF6/Sandbox_EF6.csproj
Expand Up @@ -67,6 +67,9 @@
<SubType>Designer</SubType>
</None>
<None Include="EFModel1.efmodel" />
<None Include="EFModel1.efmodel.diagram">
<DependentUpon>EFModel1.efmodel</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
Expand Down
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;

using Microsoft.EntityFrameworkCore;

namespace Testing
{
public partial class AllFeatureModel
{
public AllFeatureModel() { }

partial void CustomInit(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConnectionString);
}
}
}
29 changes: 7 additions & 22 deletions src/Testing/Sandbox/Sandbox_EFCore/EFModel.efmodel
@@ -1,39 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<modelRoot xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="2.0.0.0" Id="cba47279-0950-4257-bb2c-e4d5e72a52a4" entityContainerName="AllFeatureModel" namespace="Testing" connectionString="Data Source=.;Initial Catalog=Sandbox;Integrated Security=True" automaticMigrationsEnabled="false" entityOutputDirectory="Generated\Entities" contextOutputDirectory="Generated\Context" enumOutputDirectory="Generated\Enums" entityFrameworkVersion="EFCore" transformOnSave="false" defaultIdentityType="Int64" showCascadeDeletes="true" databaseType="None" warnOnMissingDocumentation="false" structOutputDirectory="Generated\Structs" showWarningsInDesigner="false" entityNamespace="Sandbox" enumNamespace="Sandbox" exposeForeignKeys="true" xmlns="http://schemas.microsoft.com/dsltools/EFModel">
<modelRoot xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="2.0.0.0" Id="cba47279-0950-4257-bb2c-e4d5e72a52a4" entityContainerName="AllFeatureModel" namespace="Testing" connectionString="Data Source=.;Initial Catalog=Sandbox;Integrated Security=True" automaticMigrationsEnabled="false" entityOutputDirectory="Generated\Entities" contextOutputDirectory="Generated\Context" enumOutputDirectory="Generated\Enums" entityFrameworkVersion="EFCore" chopMethodChains="false" defaultIdentityType="Int64" showCascadeDeletes="true" databaseType="None" warnOnMissingDocumentation="false" structOutputDirectory="Generated\Structs" showWarningsInDesigner="false" entityNamespace="Sandbox" enumNamespace="Sandbox" exposeForeignKeys="true" xmlns="http://schemas.microsoft.com/dsltools/EFModel">
<classes>
<modelRootHasClasses Id="d81a366e-ae88-411e-aaac-319314e6dd96">
<modelClass Id="0f66385b-c568-4e69-8745-e44437f7e48d" tableName="Entity1" databaseSchema="dbo" namespace="Sandbox" dbSetName="Entity1" name="Entity1" isOutputDirectoryTracking="false">
<unidirectionalTargets>
<unidirectionalAssociation Id="b7753c5f-7422-4651-a953-a28a0c73edbf" sourceMultiplicity="ZeroMany" targetMultiplicity="One" targetPropertyName="Entity2" collectionClass="HashSet" sourceRole="Dependent" targetRole="Principal" foreignKeyLocation="None" targetImplementNotify="false">
<modelClassMoniker Id="2773b18f-d4a5-43da-a5da-ebd95092a219" />
</unidirectionalAssociation>
</unidirectionalTargets>
<attributes>
<modelAttribute Id="83224474-4cef-42dd-bf52-bcfd028104da" type="Int64" isIdentity="true" required="true" maxLength="" indexed="true" indexedUnique="true" stringType="None" identityType="AutoGenerated" name="Id" autoProperty="true" minLength="0" columnName="Id" columnType="default" implementNotify="false" />
</attributes>
<subclasses>
<generalization Id="6ebcfba0-1f6c-492c-ba76-aff3f45a7520">
<modelClassMoniker Id="2773b18f-d4a5-43da-a5da-ebd95092a219" />
</generalization>
</subclasses>
</modelClass>
</modelRootHasClasses>
<modelRootHasClasses Id="fa8c6890-7bee-401e-a30d-7afe34dd61d7">
<modelClass Id="2773b18f-d4a5-43da-a5da-ebd95092a219" tableName="Entity2" databaseSchema="dbo" namespace="Sandbox" dbSetName="Entity2" name="Entity2" isOutputDirectoryTracking="false">
<attributes>
<modelAttribute Id="ff48d276-b59a-4abb-8400-d184bf83506f" maxLength="" indexed="false" indexedUnique="false" stringType="None" name="Property1" autoProperty="true" minLength="0" columnName="Property1" columnType="default" implementNotify="false" />
</attributes>
</modelClass>
</modelRootHasClasses>
<modelRootHasClasses Id="3f16f966-2ee2-422a-8b3a-97fa5df78eef">
<modelClass Id="555a7746-f2a7-424f-af9a-8d089111a335" tableName="Entity3" databaseSchema="dbo" namespace="Sandbox" dbSetName="Entity3" name="Entity3" outputDirectory="Generated\Entities">
<attributes>
<modelAttribute Id="8eaa6cac-615f-4161-8658-13ca46ac956e" type="Int64" isIdentity="true" required="true" maxLength="" indexed="true" indexedUnique="true" stringType="None" identityType="AutoGenerated" name="Id" autoProperty="true" minLength="0" columnName="Id" columnType="default" implementNotify="false" />
<modelAttribute Id="acc8e291-d781-434c-ae4b-ce924942530a" type="Int64" isIdentity="true" required="true" maxLength="" indexed="true" indexedUnique="true" stringType="None" identityType="AutoGenerated" name="Id" autoProperty="true" minLength="0" columnName="Id" columnType="default" implementNotify="false" />
</attributes>
</modelClass>
</modelRootHasClasses>
</classes>
<diagrams>
<modelRootHasModelDiagrams Id="cce67ab8-b9ec-483e-81a6-6ddb3852acb5">
<modelDiagramData name="EFModel" />
</modelRootHasModelDiagrams>
<modelRootHasModelDiagrams Id="0b37649d-1d48-4bae-8ca7-d4614bcd2e4d">
<modelDiagramData name="ModelDiagramData1" />
</modelRootHasModelDiagrams>
</diagrams>
</modelRoot>
30 changes: 30 additions & 0 deletions src/Testing/Sandbox/Sandbox_EFCore/EFModel.efmodel.diagram
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<eFModelDiagram dslVersion="2.0.0.0" Id="bfb92142-0258-45dd-be49-8e180d507c6f" absoluteBounds="0, 0, 11, 8.5" name="EFModel">
<modelRootMoniker Id="cba47279-0950-4257-bb2c-e4d5e72a52a4" />
<nestedChildShapes>
<classShape Id="82420a05-e7c9-429e-b4c1-9ed9153b0a9c" absoluteBounds="0.5, 2, 1.5, 1.5627718098958332" fillColor="0, 122, 204" textColor="White" outlineColor="Black" outlineDashStyle="Solid" visible="true" outlineThickness="0.01">
<modelClassMoniker Id="0f66385b-c568-4e69-8745-e44437f7e48d" />
<nestedChildShapes>
<elementListCompartment Id="80b9743b-03be-4bac-8b3c-28da2d2ad52d" absoluteBounds="0.515, 2.31, 1.4700000000000002, 0.44169108072916663" name="AttributesCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="80ea47ee-cfcd-455c-86cb-658db0217bb5" absoluteBounds="0.515, 2.7616910807291664, 1.4700000000000002, 0.44169108072916652" name="AssociationsCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="94eac949-0a00-488d-a4f0-2d49ef5ee732" absoluteBounds="0.515, 3.2133821614583331, 1.4700000000000002, 0.2493896484375" name="SourcesCompartment" titleTextColor="Black" itemTextColor="Black" />
</nestedChildShapes>
</classShape>
<classShape Id="a8aff1e3-19a5-49b6-adcd-89b4c74bba2c" absoluteBounds="3.375, 2, 1.5, 1.3704703776041667" fillColor="0, 122, 204" textColor="White" outlineColor="Black" outlineDashStyle="Solid" visible="true" outlineThickness="0.01">
<modelClassMoniker Id="2773b18f-d4a5-43da-a5da-ebd95092a219" />
<nestedChildShapes>
<elementListCompartment Id="00e74e3b-f3b5-4d35-bb28-8d7880cbdbe0" absoluteBounds="3.39, 2.3100000000000005, 1.4700000000000002, 0.44169108072916663" name="AttributesCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="84af2bb9-19ef-41c5-b688-7965ebf823b6" absoluteBounds="3.39, 2.7616910807291664, 1.4700000000000002, 0.2493896484375" name="AssociationsCompartment" titleTextColor="Black" itemTextColor="Black" />
<elementListCompartment Id="bbb2b5da-06ee-414a-9539-daf349d68f38" absoluteBounds="3.39, 3.0210807291666666, 1.4700000000000002, 0.2493896484375" name="SourcesCompartment" titleTextColor="Black" itemTextColor="Black" />
</nestedChildShapes>
</classShape>
<unidirectionalConnector Id="d6ffb0b6-aaba-481a-813c-468e228822b4" edgePoints="[(2 : 2.68523518880208); (3.375 : 2.68523518880208)]" fixedFrom="Algorithm" fixedTo="Algorithm" color="Red" dashStyle="Dash">
<unidirectionalAssociationMoniker Id="b7753c5f-7422-4651-a953-a28a0c73edbf" />
<relativeChildShapes />
<nodes>
<classShapeMoniker Id="82420a05-e7c9-429e-b4c1-9ed9153b0a9c" />
<classShapeMoniker Id="a8aff1e3-19a5-49b6-adcd-89b4c74bba2c" />
</nodes>
</unidirectionalConnector>
</nestedChildShapes>
</eFModelDiagram>
Binary file not shown.

0 comments on commit af17f6c

Please sign in to comment.