public void ProjectScaffoldingWithDataBindingsFromMockDatabaseTest()
        {
            // Create instance of EF Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = Databases.Store,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\Store.Mock.DataBindings"
            };

            // Apply settings for EF Core project
            project.Settings.ForceOverwrite     = true;
            project.Settings.EnableDataBindings = true;
            project.Settings.AuditEntity        = new AuditEntity("CreationUser", "CreationDateTime", "LastUpdateUser", "LastUpdateDateTime");
            project.Settings.ConcurrencyToken   = "Timestamp";
            project.Settings.EntitiesWithDataContracts.Add("Sales.Order");

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingFromExistingDatabaseTest()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(LoggerMocker.GetLogger <SqlServerDatabaseFactory>(), "server=(local);database=Store;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = database,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\Store"
            };

            // Apply settings for Entity Framework Core project
            project.Settings.ForceOverwrite   = true;
            project.Settings.AuditEntity      = new AuditEntity("CreationUser", "CreationDateTime", "LastUpdateUser", "LastUpdateDateTime");
            project.Settings.ConcurrencyToken = "Timestamp";
            project.Settings.EntitiesWithDataContracts.Add("Sales.Order");

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingForNorthwindDatabaseTest()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(SqlServerDatabaseFactory.GetLogger(), "server=(local);database=Northwind;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Northwind.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\Northwind.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings => settings.ForceOverwrite = true);

            project.Selection("dbo.Orders", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void TestControllerScaffoldingFromStoreDatabase()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(LoggerMocker.GetLogger <SqlServerDatabaseFactory>(), "server=(local);database=Store;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var entityFrameworkProject = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = database,
                OutputDirectory = "C:\\Temp\\CatFactory.AspNetCore\\CatFactory.AspNetCore.Demo\\src\\Store.Core"
            };

            // Apply settings for project
            entityFrameworkProject.GlobalSelection(settings =>
            {
                settings.ForceOverwrite   = true;
                settings.ConcurrencyToken = "Timestamp";
                settings.AuditEntity      = new AuditEntity("CreationUser", "CreationDateTime", "LastUpdateUser", "LastUpdateDateTime");
            });

            entityFrameworkProject.Select("Sales.Order", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            entityFrameworkProject.BuildFeatures();

            // Scaffolding =^^=
            entityFrameworkProject
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();

            entityFrameworkProject
            .ScaffoldAspNetCore("Store", "C:\\Temp\\CatFactory.AspNetCore\\CatFactory.AspNetCore.Demo\\src\\Store.AspNetCore", entityFrameworkProject.Database);
        }
        public void ProjectScaffoldingForNorthwindDatabaseTest()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(LoggerMocker.GetLogger <SqlServerDatabaseFactory>(), "server=(local);database=Northwind;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Northwind",
                Database        = database,
                OutputDirectory = "C:\\VsCode\\Northwind\\src"
            };

            // Apply settings for Entity Framework Core project
            project.Settings.ForceOverwrite = true;

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingWithModifiedNamespacesFromExistingDatabaseTest()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(LoggerMocker.GetLogger <SqlServerDatabaseFactory>(), "server=(local);database=Northwind;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Northwind",
                Database        = database,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\ModifiedNorthwind"
            };

            // Apply settings for Entity Framework Core project
            project.Settings.ForceOverwrite = true;

            // Set custom namespaces
            project.Namespaces.EntityLayer   = "EL";
            project.Namespaces.DataLayer     = "DL";
            project.Namespaces.Contracts     = "Interfaces";
            project.Namespaces.DataContracts = "Dtos";
            project.Namespaces.Repositories  = "Implementations";

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void TestScaffoldingWebApiFromOnlineStoreDatabase()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import("server=(local);database=OnlineStore;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var entityFrameworkProject = new EntityFrameworkCoreProject
            {
                Name            = "OnlineStore.Core",
                Database        = database,
                OutputDirectory = "C:\\Temp\\CatFactory.AspNetCore\\OnlineStore.Core"
            };

            // Apply settings for project
            entityFrameworkProject.GlobalSelection(settings =>
            {
                settings.ForceOverwrite   = true;
                settings.ConcurrencyToken = "Timestamp";
                settings.AuditEntity      = new AuditEntity
                {
                    CreationUserColumnName       = "CreationUser",
                    CreationDateTimeColumnName   = "CreationDateTime",
                    LastUpdateUserColumnName     = "LastUpdateUser",
                    LastUpdateDateTimeColumnName = "LastUpdateDateTime"
                };
            });

            entityFrameworkProject.Selection("Sales.OrderHeader", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            entityFrameworkProject.BuildFeatures();

            // Scaffolding =^^=
            entityFrameworkProject
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();

            var aspNetCoreProject = entityFrameworkProject
                                    .CreateAspNetCoreProject("OnlineStore.WebAPI", "C:\\Temp\\CatFactory.AspNetCore\\OnlineStore.WebAPI");

            aspNetCoreProject.GlobalSelection(settings => settings.ForceOverwrite = true);

            // Add event handlers to before and after of scaffold

            aspNetCoreProject.ScaffoldingDefinition += (source, args) =>
            {
                // Add code to perform operations with code builder instance before to create code file
            };

            aspNetCoreProject.ScaffoldedDefinition += (source, args) =>
            {
                // Add code to perform operations after of create code file
            };

            aspNetCoreProject.ScaffoldAspNetCore();
        }
Example #8
0
        static void B()
        {
            // Import database
            var factory = new SqlServerDatabaseFactory()
            {
                ConnectionString = key
            };
            var database = factory.Import();
            // Create instance of Entity Framework Core Project
            var entityFrameworkProject = new EntityFrameworkCoreProject()
            {
                Name            = "OnLineStore.Core",
                Database        = database,
                OutputDirectory = @"./"
            };

            // Apply settings for project
            entityFrameworkProject.GlobalSelection(settings => {
                settings.ForceOverwrite   = true;
                settings.ConcurrencyToken = "Timestamp";
                settings.Validate();
                settings.EnableDataBindings = true;
                settings.AuditEntity        = new AuditEntity {
                    CreationUserColumnName       = "CreationUser",
                    CreationDateTimeColumnName   = "CreationDateTime",
                    LastUpdateUserColumnName     = "LastUpdateUser",
                    LastUpdateDateTimeColumnName = "LastUpdateDateTime"
                };
            });

            entityFrameworkProject.Select("Sales.OrderHeader", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            entityFrameworkProject.BuildFeatures();

            // Scaffolding =^^=
            entityFrameworkProject
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();

            var aspNetCoreProject = entityFrameworkProject
                                    .CreateAspNetCoreProject("OnlineStoreWithFluentValidation.WebAPI", @"./", entityFrameworkProject.Database);

            aspNetCoreProject.GlobalSelection(settings => {
                settings.ForceOverwrite = true;
            });

            aspNetCoreProject.Select("Sales.OrderDetail", settings => {
                settings.ConcurrencyToken          = "123";
                settings.EntitiesWithDataContracts = true;
                settings.Validate();
            });

            aspNetCoreProject
            .ScaffoldAspNetCore();
        }
        public void TestEntityFrameworkCoreProject()
        {
            // Arrange
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = StoreDatabase.Mock,
                OutputDirectory = "C:\\Temp\\CatFactory\\EntityFrameworkCore"
            };

            project.BuildFeatures();

            project.GlobalSelection(settings =>
            {
                settings.UseDataAnnotations = true;
                settings.AddDataBindings    = true;
            });

            project.Select("Sales.Order", settings => settings.EntitiesWithDataContracts = true);

            project.ScaffoldingDefinition += (source, args) =>
            {
            };

            project.ScaffoldedDefinition += (source, args) =>
            {
            };

            // Act
            foreach (var table in project.Database.Tables)
            {
                var selection = project.Selections.FirstOrDefault(item => item.Pattern == table.FullName);

                if (selection == null)
                {
                    selection = project.GlobalSelection();
                }

                var codeBuilder = new CSharpClassCodeBuilder
                {
                    ObjectDefinition = project.GetEntityClassDefinition(table, selection),
                    OutputDirectory  = project.OutputDirectory,
                    ForceOverwrite   = true
                };

                project.Scaffolding(codeBuilder);

                codeBuilder.CreateFile();

                project.Scaffolded(codeBuilder);
            }

            // Assert
            Assert.True(project.Selections.Count == 2);
        }
        public void ProjectScaffoldingForAdventureWorksDatabaseTest()
        {
            // Create instance of factory for SQL Server
            var databaseFactory = new SqlServerDatabaseFactory(SqlServerDatabaseFactory.GetLogger())
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString      = "server=(local);database=AdventureWorks2017;integrated security=yes;",
                    ImportScalarFunctions = true,
                    ImportTableFunctions  = true,
                    Exclusions            =
                    {
                        "dbo.sysdiagrams",
                        "Production.Document",
                        "Production.ProductDocument"
                    },
                    ExclusionTypes =
                    {
                        "hierarchyid",
                        "geography"
                    }
                }
            };

            // Import database
            var database = databaseFactory.Import();

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "AdventureWorks",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\AdventureWorks.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite = true;
            });

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingForNorthwindDatabaseTest()
        {
            // Import database
            var factory = new SqlServerDatabaseFactory
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString       = "server=(local);database=Northwind;integrated security=yes;",
                    ImportScalarFunctions  = true,
                    ImportTableFunctions   = true,
                    ImportStoredProcedures = true,
                    Exclusions             =
                    {
                        "dbo.sysdiagrams",
                        "dbo.sp_alterdiagram",
                        "dbo.sp_creatediagram",
                        "dbo.sp_dropdiagram",
                        "dbo.sp_helpdiagramdefinition",
                        "dbo.sp_helpdiagrams",
                        "dbo.sp_renamediagram",
                        "dbo.sp_upgraddiagrams",
                        "dbo.fn_diagramobjects"
                    }
                }
            };

            var database = factory.Import();

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Northwind.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\Northwind.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings => settings.ForceOverwrite = true);

            project.Selection("dbo.Orders", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingForMockDatabaseTest()
        {
            // Create instance of EF Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "College.Mock",
                Database        = Databases.College,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\College.Mock"
            };

            // Apply settings for EF Core project
            project.GlobalSelection(settings => settings.ForceOverwrite = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingWithDefaultsFromClassicMockDatabaseTest()
        {
            // Create instance of EF Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "School",
                Database        = Databases.School,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\School.Mock"
            };

            // Apply settings for EF Core project
            project.Settings.ForceOverwrite = true;

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
Example #14
0
        public void ProjectScaffoldingForWideWorldImportersDatabaseTest()
        {
            // Create database factory
            var databaseFactory = new SqlServerDatabaseFactory
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString     = "server=(local);database=WideWorldImporters;integrated security=yes;",
                    ImportTableFunctions = true,
                    Exclusions           =
                    {
                        "dbo.sysdiagrams",
                        "dbo.fn_diagramobjects"
                    }
                }
            };

            // Import database
            var database = databaseFactory.Import();

            // Create instance of Entity Framework Core project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "WideWorldImporters.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\WideWorldImporters.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings => settings.ForceOverwrite = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
Example #15
0
        public void TestEntityFrameworkCoreProject()
        {
            // Arrange
            var project = new EntityFrameworkCoreProject
            {
                Name            = "OnlineStore",
                Database        = Databases.OnlineStore,
                OutputDirectory = @"C:\Temp\CatFactory\EntityFrameworkCore",
                AuthorInfo      = new AuthorInfo
                {
                    Name  = "Hans H.",
                    Email = "*****@*****.**"
                }
            };

            project.BuildFeatures();

            project.GlobalSelection(settings =>
            {
                settings.UseDataAnnotations = true;
                settings.AddDataBindings    = true;
            });

            project.Selection("Sales.OrderHeader", settings => settings.EntitiesWithDataContracts = true);

            project.ScaffoldingDefinition += (source, args) =>
            {
            };

            project.ScaffoldedDefinition += (source, args) =>
            {
            };

            // Act
            project.Scaffold();

            // Assert
            Assert.True(project.Selections.Count == 2);
        }
        public void ProjectScaffoldingWithDataAnnotationsForOnlineStoreDatabaseTest()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(SqlServerDatabaseFactory.GetLogger(), "server=(local);database=OnlineStore;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "OnlineStoreWithDataAnnotations.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\OnlineStoreWithDataAnnotations.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite     = true;
                settings.UseDataAnnotations = true;
                settings.ConcurrencyToken   = "Timestamp";
                settings.AuditEntity        = new AuditEntity
                {
                    CreationUserColumnName       = "CreationUser",
                    CreationDateTimeColumnName   = "CreationDateTime",
                    LastUpdateUserColumnName     = "LastUpdateUser",
                    LastUpdateDateTimeColumnName = "LastUpdateDateTime"
                };
            });

            project.Selection("Sales.OrderHeader", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingWithDbSetPropertiesAndDataAnnotationsTest()
        {
            // Create instance of EF Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = Databases.Store,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\StoreWithDbSetPropertiesAndDataAnnotations.Mock"
            };

            // Apply settings for EF Core project
            project.Settings.ForceOverwrite     = true;
            project.Settings.UseDataAnnotations = true;
            project.Settings.DeclareDbSetPropertiesInDbContext = true;

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingForAdventureWorksDatabaseTest()
        {
            // Create instance of factory for SQL Server
            var factory = new SqlServerDatabaseFactory(LoggerMocker.GetLogger <SqlServerDatabaseFactory>())
            {
                ConnectionString = "server=(local);database=AdventureWorks2012;integrated security=yes;",
                ImportSettings   = new DatabaseImportSettings
                {
                    Exclusions = new List <string>
                    {
                        "dbo.sysdiagrams"
                    }
                }
            };

            // Import database
            var database = factory.Import();

            // Create instance of Entity Framework Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "AdventureWorks",
                Database        = database,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\AdventureWorks"
            };

            // Apply settings for Entity Framework Core project
            project.Settings.ForceOverwrite = true;

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingWithModifiedNamespacesFromMockDatabaseTest()
        {
            // Create instance of EF Core Project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = Databases.Store,
                OutputDirectory = "C:\\Temp\\CatFactory.EntityFrameworkCore\\ModifiedStore.Mock"
            };

            // Apply settings for EF Core project
            project.Settings.ForceOverwrite = true;

            project.Namespaces.EntityLayer = "EL";
            project.Namespaces.DataLayer   = "DL";

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void TestEntityFrameworkCoreProject()
        {
            // Arrange
            var project = new EntityFrameworkCoreProject
            {
                Name            = "Store",
                Database        = StoreDatabase.Mock,
                OutputDirectory = "C:\\Temp\\CatFactory\\EntityFrameworkCore",
                AuthorInfo      = new AuthorInfo
                {
                    Name  = "Hans H.",
                    Email = "*****@*****.**"
                }
            };

            project.BuildFeatures();

            project.GlobalSelection(settings =>
            {
                settings.UseDataAnnotations = true;
                settings.AddDataBindings    = true;
            });

            project.Select("Sales.Order", settings => settings.EntitiesWithDataContracts = true);

            project.ScaffoldingDefinition += (source, args) =>
            {
            };

            project.ScaffoldedDefinition += (source, args) =>
            {
            };

            // Act
            foreach (var table in project.Database.Tables)
            {
                var selection = project.Selections.FirstOrDefault(item => item.Pattern == table.FullName) ?? project.GlobalSelection();

                var codeBuilder = new CSharpClassCodeBuilder
                {
                    ObjectDefinition = project.GetEntityClassDefinition(table, selection),
                    OutputDirectory  = project.OutputDirectory,
                    ForceOverwrite   = true
                };

                codeBuilder.TranslatedDefinition += (source, args) =>
                {
                    if (project.AuthorInfo != null)
                    {
                        codeBuilder.Lines.Insert(0, new CommentLine("// Author name: {0}", project.AuthorInfo.Name));
                        codeBuilder.Lines.Insert(1, new CommentLine("// Email: {0}", project.AuthorInfo.Email));
                        codeBuilder.Lines.Insert(2, new CodeLine());
                    }
                };

                project.Scaffolding(codeBuilder);

                codeBuilder.CreateFile();

                project.Scaffolded(codeBuilder);
            }

            // Assert
            Assert.True(project.Selections.Count == 2);
        }
        public void ProjectScaffoldingForStoreDatabaseTest()
        {
            // Create database factory
            var databaseFactory = new SqlServerDatabaseFactory(SqlServerDatabaseFactory.GetLogger())
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString     = "server=(local);database=OnLineStore;integrated security=yes;",
                    ImportTableFunctions = true,
                    Exclusions           =
                    {
                        "dbo.sysdiagrams",
                        "dbo.fn_diagramobjects"
                    }
                }
            };

            // Import database
            var database = databaseFactory.Import();

            // Create instance of Entity Framework Core project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "OnLineStore.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\OnLineStore.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite   = true;
                settings.ConcurrencyToken = "Timestamp";
                settings.AuditEntity      = new AuditEntity
                {
                    CreationUserColumnName       = "CreationUser",
                    CreationDateTimeColumnName   = "CreationDateTime",
                    LastUpdateUserColumnName     = "LastUpdateUser",
                    LastUpdateDateTimeColumnName = "LastUpdateDateTime"
                };
            });

            project.Selection("Sales.OrderHeader", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Add event handlers to before and after of scaffold

            project.ScaffoldingDefinition += (source, args) =>
            {
                // Add code to perform operations with code builder instance before to create code file
            };

            project.ScaffoldedDefinition += (source, args) =>
            {
                // Add code to perform operations after of create code file
            };

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public void ProjectScaffoldingForOnlineStoreDatabaseTest()
        {
            // Create database factory
            var databaseFactory = new SqlServerDatabaseFactory
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString     = "server=(local);database=OnlineStore;integrated security=yes;",
                    ImportTableFunctions = true,
                    Exclusions           =
                    {
                        "dbo.sysdiagrams",
                        "dbo.fn_diagramobjects"
                    }
                }
            };

            // Import database
            var database = databaseFactory.Import();

            // Create instance of Entity Framework Core project
            var project = new EntityFrameworkCoreProject
            {
                Name            = "OnlineStore.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.EntityFrameworkCore\OnlineStore.Core"
            };

            // Apply settings for Entity Framework Core project
            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite   = true;
                settings.ConcurrencyToken = "Timestamp";
                settings.AuditEntity      = new AuditEntity
                {
                    CreationUserColumnName       = "CreationUser",
                    CreationDateTimeColumnName   = "CreationDateTime",
                    LastUpdateUserColumnName     = "LastUpdateUser",
                    LastUpdateDateTimeColumnName = "LastUpdateDateTime"
                };
            });

            project.Selection("Sales.OrderHeader", settings => settings.EntitiesWithDataContracts = true);

            // Build features for project, group all entities by schema into a feature
            project.BuildFeatures();

            // Add event handlers to before and after of scaffold

            project.ScaffoldingDefinition += (source, args) =>
            {
                // Add code to perform operations with code builder instance before to create code file

                if (args.CodeBuilder.ObjectDefinition is EntityConfigurationClassDefinition cast)
                {
                    cast.Namespaces.Add("ValueConversion");

                    cast.Methods.First(item => item.Name == "Configure").Lines.Add(
                        new TodoLine("builder.Property(p => p.DeleteFlag).HasConversion(\"OnlineStore.DataLayer.ValueConversion.BoolToStringConverters.bYN\");")
                        );
                }
            };

            project.ScaffoldedDefinition += (source, args) =>
            {
                // Add code to perform operations after of create code file
            };

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldValueConversion()
            .ScaffoldDataLayer()
            ;
        }