Exemplo n.º 1
0
        public void ProjectScaffoldingFromWideWorldImportersDatabase()
        {
            // Import database
            var databaseFactory = new SqlServerDatabaseFactory(SqlServerDatabaseFactory.GetLogger())
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString = "server=(local);database=WideWorldImporters;integrated security=yes;",
                    Exclusions       =
                    {
                        "dbo.sysdiagrams"
                    }
                }
            };

            var database = databaseFactory.Import();

            // Create instance of Dapper Project
            var project = DapperProject.Create("WideWorldImporters.Core", database, @"C:\Temp\CatFactory.Dapper\WideWorldImporters.Core");

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

            project.Selection("Warehouse.StockItems", settings => settings.AddPagingForGetAllOperation = true);

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

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
        public static EntityClassDefinition GetEntityClassDefinition(this DapperProject project, ScalarFunction scalarFunction)
        {
            var definition = new EntityClassDefinition
            {
                Namespaces =
                {
                    "System"
                },
                Namespace      = project.Database.HasDefaultSchema(scalarFunction) ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(scalarFunction.Schema),
                AccessModifier = AccessModifier.Public,
                Name           = scalarFunction.GetEntityName(),
                Constructors   =
                {
                    new ClassConstructorDefinition(AccessModifier.Public)
                }
            };

            if (!string.IsNullOrEmpty(scalarFunction.Description))
            {
                definition.Documentation.Summary = scalarFunction.Description;
            }

            var selection = project.GetSelection(scalarFunction);

            definition.Implements.Add("IEntity");

            if (selection.Settings.SimplifyDataTypes)
            {
                definition.SimplifyDataTypes();
            }

            return(definition);
        }
        public static EntityClassDefinition GetEntityClassDefinition(this DapperProject project, StoredProcedure storedProcedure)
        {
            var definition = new EntityClassDefinition
            {
                Namespaces =
                {
                    "System"
                },
                Namespace      = project.Database.HasDefaultSchema(storedProcedure) ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(storedProcedure.Schema),
                AccessModifier = AccessModifier.Public,
                Name           = storedProcedure.GetResultName(),
                Constructors   =
                {
                    new ClassConstructorDefinition(AccessModifier.Public)
                }
            };

            foreach (var resultSet in storedProcedure.FirstResultSetsForObject)
            {
                var type = project.Database.ResolveDatabaseType(resultSet.SystemTypeName);

                definition.Properties.Add(new PropertyDefinition(AccessModifier.Public, type, resultSet.Name)
                {
                    IsAutomatic = true
                });
            }

            return(definition);
        }
Exemplo n.º 4
0
 public static RepositoryInterfaceDefinition GetRepositoryInterfaceDefinition(this DapperProject project)
 => new RepositoryInterfaceDefinition
 {
     Namespace      = project.GetDataLayerContractsNamespace(),
     AccessModifier = AccessModifier.Public,
     Name           = "IRepository"
 };
        public static CSharpClassDefinition GetRepositoryBaseClassDefinition(this DapperProject project)
        {
            var classDefinition = new CSharpClassDefinition();

            classDefinition.Namespaces.Add("System");
            classDefinition.Namespaces.Add("System.Linq");
            classDefinition.Namespaces.Add("System.Threading.Tasks");
            classDefinition.Namespaces.Add("Microsoft.Extensions.Options");

            classDefinition.Namespaces.Add(project.GetEntityLayerNamespace());

            classDefinition.Namespace = project.GetDataLayerContractsNamespace();

            classDefinition.Name = "Repository";

            classDefinition.Constructors.Add(new ClassConstructorDefinition(new ParameterDefinition("IOptions<AppSettings>", "appSettings"))
            {
                Lines = new List <ILine>
                {
                    new CodeLine("ConnectionString = appSettings.Value.ConnectionString;")
                }
            });

            classDefinition.Properties.Add(new PropertyDefinition("String", "ConnectionString ")
            {
                AccessModifier = AccessModifier.Protected,
                IsReadOnly     = true
            });

            return(classDefinition);
        }
        public async Task ProjectSelectionScopeAsync()
        {
            // Arrange

            // Get database
            var database = await SqlServerDatabaseFactory
                           .ImportAsync("server=(local);database=OnlineStore;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Entity Framework Core project
            var project = DapperProject
                          .Create("OnlineStore", database, @"C:\Temp\CatFactory.Dapper\OnlineStore.Core");

            // Act

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

            project.Selection("Sales.OrderHeader", settings => settings.UseStringBuilderForQueries = false);

            var orderHeader = database.FindTable("Sales.OrderHeader");

            var selectionForOrder = project.GetSelection(orderHeader);

            // Assert

            Assert.True(project.Selections.Count == 2);

            Assert.True(project.GlobalSelection().Settings.UseStringBuilderForQueries == true);

            Assert.True(selectionForOrder.Settings.UseStringBuilderForQueries == false);
        }
Exemplo n.º 7
0
 public static EntityInterfaceDefinition GetEntityInterfaceDefinition(this DapperProject project)
 => new EntityInterfaceDefinition
 {
     Namespace      = project.GetEntityLayerNamespace(),
     AccessModifier = AccessModifier.Public,
     Name           = "IEntity"
 };
Exemplo n.º 8
0
        public void SqlDomScaffoldingFromWideWorldImportersDatabase()
        {
            // Import database
            var factory = new SqlServerDatabaseFactory
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString  = "server=(local);database=WideWorldImporters;integrated security=yes;",
                    ImportTables      = false,
                    ImportViews       = true,
                    ImportCommandText = "select 'sys' as 'schema_name', 'columns' as 'object_name', 'VIEW' as 'object_type'"
                }
            };

            var database = factory.Import();

            // Create instance of Dapper Project
            var project = DapperProject.Create("SqlDom.Core", database, @"C:\Temp\CatFactory.Dapper\SqlDom.Core");

            // Apply settings for 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();
        }
Exemplo n.º 9
0
        public void ProjectScaffoldingFromNorthwindDatabaseTest()
        {
            // Import database
            var database = SqlServerDatabaseFactory
                           .Import(LoggerMocker.GetLogger <SqlServerDatabaseFactory>(), "server=(local);database=Northwind;integrated security=yes;", "dbo.sysdiagrams");

            // Create instance of Dapper Project
            var project = new DapperProject
            {
                Name            = "Northwind",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.Dapper\Northwind.Dapper.API\src\Northwind.Dapper.API"
            };

            // Apply settings for 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();
        }
Exemplo n.º 10
0
 public static RepositoryBaseClassDefinition GetRepositoryBaseClassDefinition(this DapperProject project)
 => new RepositoryBaseClassDefinition
 {
     Namespaces =
     {
         "System.Data",
         project.GetEntityLayerNamespace()
     },
     Namespace      = project.GetDataLayerContractsNamespace(),
     AccessModifier = AccessModifier.Public,
     Name           = "Repository",
     Constructors   =
     {
         new ClassConstructorDefinition(AccessModifier.Public, new ParameterDefinition("IDbConnection", "connection"))
         {
             Lines =
             {
                 new CodeLine("Connection = connection;")
             }
         }
     },
     Properties =
     {
         new PropertyDefinition(AccessModifier.Protected, "IDbConnection", "Connection")
         {
             IsReadOnly = true
         }
     }
 };
        public void TestProjectSelectionScope()
        {
            // Arrange

            // 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 DapperProject
            {
                Name            = "OnLineStore",
                Database        = database,
                OutputDirectory = "C:\\Temp\\CatFactory.Dapper\\OnLineStore.Core"
            };

            // Act

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

            project.Selection("Sales.OrderHeader", settings => settings.UseStringBuilderForQueries = false);

            var orderHeader = database.FindTable("Sales.OrderHeader");

            var selectionForOrder = project.GetSelection(orderHeader);

            // Assert
            Assert.True(project.Selections.Count == 2);
            Assert.True(project.GlobalSelection().Settings.UseStringBuilderForQueries == true);
            Assert.True(selectionForOrder.Settings.UseStringBuilderForQueries == false);
        }
Exemplo n.º 12
0
        public void TestDapperProject()
        {
            // Arrange
            var project = new DapperProject
            {
                Name            = "Store",
                Database        = Databases.OnLineStore,
                OutputDirectory = "C:\\Temp\\CatFactory\\Dapper",
                AuthorInfo      = new AuthorInfo
                {
                    Name  = "Hans H.",
                    Email = "*****@*****.**"
                }
            };

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

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

            project.GlobalSelection(settings => settings.UseStringBuilderForQueries = false);

            project.Selection("Sales.Order", settings => settings.UseQueryBuilder = true);

            // 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 static RepositoryInterfaceDefinition GetRepositoryInterfaceDefinition(this DapperProject project)
 {
     return(new RepositoryInterfaceDefinition
     {
         Namespace = project.GetDataLayerContractsNamespace(),
         Name = "IRepository"
     });
 }
Exemplo n.º 14
0
        public void TestDapperProject()
        {
            // Arrange
            var project = new DapperProject
            {
                Name            = "Store",
                Database        = StoreDatabase.Mock,
                OutputDirectory = "C:\\Temp\\CatFactory\\Dapper"
            };

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

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

            project.GlobalSelection(settings =>
            {
                settings.UseStringBuilderForQueries = false;
            });

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

            // 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 static EntityClassDefinition GetEntityClassDefinition(this DapperProject project, IView view)
        {
            var definition = new EntityClassDefinition
            {
                Namespaces =
                {
                    "System"
                },
                Namespace      = project.Database.HasDefaultSchema(view) ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(view.Schema),
                AccessModifier = AccessModifier.Public,
                Name           = project.GetEntityName(view)
            };

            definition.Constructors.Add(new ClassConstructorDefinition(AccessModifier.Public));

            if (!string.IsNullOrEmpty(view.Description))
            {
                definition.Documentation.Summary = view.Description;
            }

            var selection = project.GetSelection(view);

            foreach (var column in view.Columns)
            {
                var propertyType = project.Database.ResolveDatabaseType(column);
                var propertyName = project.GetPropertyName(view, column);

                if (selection.Settings.UseAutomaticPropertiesForEntities)
                {
                    definition.Properties.Add(new PropertyDefinition
                    {
                        AccessModifier = AccessModifier.Public,
                        Type           = project.Database.ResolveDatabaseType(column),
                        Name           = project.GetPropertyName(view, column),
                        IsAutomatic    = true
                    });
                }
                else
                {
                    definition.AddPropertyWithField(propertyType, propertyName);
                }
            }

            definition.Implements.Add("IEntity");

            if (selection.Settings.SimplifyDataTypes)
            {
                definition.SimplifyDataTypes();
            }

            return(definition);
        }
Exemplo n.º 16
0
        public void ProjectScaffoldingFromOnlineStoreDatabase()
        {
            // 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 Dapper Project
            var project = DapperProject.Create("OnlineStore.Core", database, @"C:\Temp\CatFactory.Dapper\OnlineStore.Core");

            /* Apply settings for project */

            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite   = true;
                settings.UpdateExclusions = new List <string> {
                    "CreationUser", "CreationDateTime", "Timestamp"
                };
                settings.InsertExclusions = new List <string> {
                    "LastUpdateUser", "LastUpdateDateTime", "Timestamp"
                };
            });

            project.Selection("Warehouse.*", settings => settings.UseStringBuilderForQueries = false);

            project.Selection("Sales.*", settings => settings.AddPagingForGetAllOperation = true);

            project.Selection("Sales.OrderDetail", settings => settings.RemoveAction <ReadAllAction>());

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

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

            // Create instance of Dapper Project
            var project = new DapperProject
            {
                Name            = "Store",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.Dapper\Store.Dapper.API\src\Store.Dapper.API"
            };

            // Apply settings for project
            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite = true;
                settings.UpdateExclusions.AddRange(new string[] { "CreationUser", "CreationDateTime", "Timestamp" });
                settings.InsertExclusions.AddRange(new string[] { "LastUpdateUser", "LastUpdateDateTime", "Timestamp" });
            });

            project.Select("Production.*", settings =>
            {
                settings.UseStringBuilderForQueries   = false;
                settings.AddPagingForGetAllOperations = true;
            });

            project.Select("Sales.Order", settings => settings.AddPagingForGetAllOperations = 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 static AppSettingsClassDefinition GetAppSettingsClassDefinition(this DapperProject project)
 => new AppSettingsClassDefinition
 {
     Namespace      = project.GetDataLayerNamespace(),
     AccessModifier = AccessModifier.Public,
     Name           = "AppSettings",
     Properties     =
     {
         new PropertyDefinition(AccessModifier.Public, "string", "ConnectionString")
         {
             IsReadOnly = true
         }
     }
 };
        public void ProjectScaffoldingFromNorthwindDatabaseTest()
        {
            // Import database
            var databaseFactory = new SqlServerDatabaseFactory(SqlServerDatabaseFactory.GetLogger())
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString       = "server=(local);database=Northwind;integrated security=yes;",
                    ImportScalarFunctions  = true,
                    ImportTableFunctions   = true,
                    ImportStoredProcedures = true,
                    Exclusions             =
                    {
                        "dbo.sp_alterdiagram",
                        "dbo.sp_creatediagram",
                        "dbo.sp_dropdiagram",
                        "dbo.sp_helpdiagramdefinition",
                        "dbo.sp_helpdiagrams",
                        "dbo.sp_renamediagram",
                        "dbo.sp_upgraddiagrams",
                        "dbo.sysdiagrams",
                        "dbo.fn_diagramobjects"
                    }
                }
            };

            var database = databaseFactory.Import();

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

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

            project.Selection("dbo.Ten Most Expensive Products", settings => settings.UseStringBuilderForQueries = false);

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

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
Exemplo n.º 20
0
 public static CSharpClassDefinition GetAppSettingsClassDefinition(this DapperProject project)
 {
     return(new CSharpClassDefinition
     {
         Namespace = project.GetDataLayerNamespace(),
         Namespaces = new List <string>
         {
             "System"
         },
         Name = "AppSettings",
         Properties = new List <PropertyDefinition>
         {
             new PropertyDefinition("String", "ConnectionString")
         }
     });
 }
        public static EntityClassDefinition GetEntityClassDefinition(this DapperProject project, ITableFunction tableFunction)
        {
            var definition = new EntityClassDefinition
            {
                Namespaces =
                {
                    "System"
                },
                Namespace      = project.Database.HasDefaultSchema(tableFunction) ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(tableFunction.Schema),
                AccessModifier = AccessModifier.Public,
                Name           = project.GetResultName(tableFunction),
                Constructors   =
                {
                    new ClassConstructorDefinition(AccessModifier.Public)
                }
            };

            if (!string.IsNullOrEmpty(tableFunction.Description))
            {
                definition.Documentation.Summary = tableFunction.Description;
            }

            var selection = project.GetSelection(tableFunction);

            foreach (var column in tableFunction.Columns)
            {
                definition.Properties.Add(new PropertyDefinition
                {
                    AccessModifier = AccessModifier.Public,
                    Type           = project.Database.ResolveDatabaseType(column),
                    Name           = project.GetPropertyName(column.Name),
                    IsAutomatic    = true
                });
            }

            definition.Implements.Add("IEntity");

            if (selection.Settings.SimplifyDataTypes)
            {
                definition.SimplifyDataTypes();
            }

            return(definition);
        }
        public void ProjectScaffoldingFromAdventureWorksDatabaseTest()
        {
            // Import database
            var databaseFactory = new SqlServerDatabaseFactory(SqlServerDatabaseFactory.GetLogger())
            {
                DatabaseImportSettings = new DatabaseImportSettings
                {
                    ConnectionString      = "server=(local);database=AdventureWorks2017;integrated security=yes;",
                    ImportTableFunctions  = true,
                    ImportScalarFunctions = true,
                    Exclusions            =
                    {
                        "dbo.sysdiagrams"
                    },
                    ExclusionTypes =
                    {
                        "geography"
                    }
                }
            };

            var database = databaseFactory.Import();

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

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

            project.Selection("Sales.SalesOrderHeader", settings => settings.AddPagingForGetAllOperation = true);

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

            // Scaffolding =^^=
            project
            .ScaffoldEntityLayer()
            .ScaffoldDataLayer();
        }
Exemplo n.º 23
0
        public void ProjectScaffoldingFromAdventureWorksDatabaseTest()
        {
            // Import database

            var factory = new SqlServerDatabaseFactory(LoggerMocker.GetLogger <SqlServerDatabaseFactory>())
            {
                ConnectionString = "server=(local);database=AdventureWorks2012;integrated security=yes;",
                ImportSettings   = new DatabaseImportSettings
                {
                    Exclusions = new List <string> {
                        "dbo.sysdiagrams"
                    },
                    ExclusionTypes = new List <string> {
                        "geography"
                    },
                    ImportTableFunctions = true
                }
            };

            var database = factory.Import();

            // Create instance of Dapper Project
            var project = new DapperProject
            {
                Name            = "AdventureWorks",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.Dapper\AdventureWorks.Dapper.API\src\AdventureWorks.Dapper.API"
            };

            // Apply settings for 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();
        }
Exemplo n.º 24
0
        public static EntityClassDefinition CreateView(this DapperProject project, IView view)
        {
            var definition = new EntityClassDefinition();

            definition.Namespaces.Add("System");

            definition.Namespace = view.HasDefaultSchema() ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(view.Schema);

            definition.Name = view.GetEntityName();

            definition.Constructors.Add(new ClassConstructorDefinition());

            if (!string.IsNullOrEmpty(view.Description))
            {
                definition.Documentation.Summary = view.Description;
            }

            var selection = project.GetSelection(view);

            foreach (var column in view.Columns)
            {
                if (selection.Settings.UseAutomaticPropertiesForEntities)
                {
                    definition.Properties.Add(new PropertyDefinition(project.Database.ResolveType(column), view.GetPropertyNameHack(column)));
                }
                else
                {
                    definition.AddPropertyWithField(project.Database.ResolveType(column), view.GetPropertyNameHack(column));
                }
            }

            definition.Implements.Add("IEntity");

            if (selection.Settings.SimplifyDataTypes)
            {
                definition.SimplifyDataTypes();
            }

            return(definition);
        }
Exemplo n.º 25
0
        public void ProjectScaffoldingFromLegacyErpDatabase()
        {
            // 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 = Databases.LegacyErpDatabase;

            database.NamingConvention = new SqlServerDatabaseNamingConvention();

            // Create instance of Dapper Project
            var project = DapperProject.Create("OnlineStore.Core", database, @"C:\Temp\CatFactory.Dapper\LegacyErp.Core");

            // Apply settings for 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 static EntityClassDefinition GetEntityClassDefinition(this DapperProject project, ITable table)
        {
            var definition = new EntityClassDefinition
            {
                Namespaces =
                {
                    "System"
                },
                Namespace      = project.Database.HasDefaultSchema(table) ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(table.Schema),
                AccessModifier = AccessModifier.Public,
                Name           = project.GetEntityName(table),
                Constructors   =
                {
                    new ClassConstructorDefinition
                    {
                        AccessModifier = AccessModifier.Public
                    }
                }
            };

            var selection = project.GetSelection(table);

            if (selection.Settings.EnableDataBindings)
            {
                definition.Namespaces.Add("System.ComponentModel");

                definition.Implements.Add("INotifyPropertyChanged");

                definition.Events.Add(new EventDefinition(AccessModifier.Public, "PropertyChangedEventHandler", "PropertyChanged"));
            }

            if (table.PrimaryKey != null && table.PrimaryKey.Key.Count == 1)
            {
                var column = (Column)table.GetColumnsFromConstraint(table.PrimaryKey).First();

                definition.Constructors.Add(new ClassConstructorDefinition
                {
                    AccessModifier = AccessModifier.Public,
                    Parameters     =
                    {
                        new ParameterDefinition(project.Database.ResolveDatabaseType(column), project.GetParameterName(column))
                    },
                    Lines =
                    {
                        new CodeLine("{0} = {1};", project.GetPropertyName(table, column), project.GetParameterName(column))
                    }
                });
            }

            if (!string.IsNullOrEmpty(table.Description))
            {
                definition.Documentation.Summary = table.Description;
            }

            foreach (var column in table.Columns)
            {
                var propertyType = project.Database.ResolveDatabaseType(column);
                var propertyName = project.GetPropertyName(table, column);

                if (selection.Settings.EnableDataBindings)
                {
                    definition.AddViewModelProperty(propertyType, propertyName);
                }
                else
                {
                    if (selection.Settings.UseAutomaticPropertiesForEntities)
                    {
                        definition.Properties.Add(new PropertyDefinition
                        {
                            AccessModifier = AccessModifier.Public,
                            Type           = propertyType,
                            Name           = propertyName,
                            IsAutomatic    = true
                        });
                    }
                    else
                    {
                        definition.AddPropertyWithField(propertyType, propertyName);
                    }
                }
            }

            definition.Implements.Add("IEntity");

            if (selection.Settings.SimplifyDataTypes)
            {
                definition.SimplifyDataTypes();
            }

            return(definition);
        }
Exemplo n.º 27
0
        public static EntityClassDefinition CreateEntity(this DapperProject project, ITable table)
        {
            var classDefinition = new EntityClassDefinition();

            classDefinition.Namespaces.Add("System");

            var selection = project.GetSelection(table);

            if (selection.Settings.EnableDataBindings)
            {
                classDefinition.Namespaces.Add("System.ComponentModel");

                classDefinition.Implements.Add("INotifyPropertyChanged");

                classDefinition.Events.Add(new EventDefinition("PropertyChangedEventHandler", "PropertyChanged"));
            }

            classDefinition.Namespace = table.HasDefaultSchema() ? project.GetEntityLayerNamespace() : project.GetEntityLayerNamespace(table.Schema);

            classDefinition.Name = table.GetEntityName();

            classDefinition.Constructors.Add(new ClassConstructorDefinition());

            if (table.PrimaryKey != null && table.PrimaryKey.Key.Count == 1)
            {
                var column = table.GetColumnsFromConstraint(table.PrimaryKey).First();

                classDefinition.Constructors.Add(new ClassConstructorDefinition(new ParameterDefinition(project.Database.ResolveType(column), column.GetParameterName()))
                {
                    Lines = new List <ILine>
                    {
                        new CodeLine("{0} = {1};", column.GetPropertyName(), column.GetParameterName())
                    }
                });
            }

            if (!string.IsNullOrEmpty(table.Description))
            {
                classDefinition.Documentation.Summary = table.Description;
            }

            foreach (var column in table.Columns)
            {
                if (selection.Settings.EnableDataBindings)
                {
                    classDefinition.AddViewModelProperty(project.Database.ResolveType(column), table.GetPropertyNameHack(column));
                }
                else
                {
                    if (selection.Settings.UseAutomaticPropertiesForEntities)
                    {
                        classDefinition.Properties.Add(new PropertyDefinition(project.Database.ResolveType(column), table.GetPropertyNameHack(column)));
                    }
                    else
                    {
                        classDefinition.AddPropertyWithField(project.Database.ResolveType(column), table.GetPropertyNameHack(column));
                    }
                }
            }

            classDefinition.Implements.Add("IEntity");

            if (selection.Settings.SimplifyDataTypes)
            {
                classDefinition.SimplifyDataTypes();
            }

            return(classDefinition);
        }
        public void ProjectScaffoldingFromOnLineStoreDatabaseTest()
        {
            // 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 Dapper Project
            var project = new DapperProject
            {
                Name            = "OnlineStore.Core",
                Database        = database,
                OutputDirectory = @"C:\Temp\CatFactory.Dapper\OnlineStore.Core"
            };

            // Apply settings for project
            project.GlobalSelection(settings =>
            {
                settings.ForceOverwrite   = true;
                settings.UpdateExclusions = new List <string> {
                    "CreationUser", "CreationDateTime", "Timestamp"
                };
                settings.InsertExclusions = new List <string> {
                    "LastUpdateUser", "LastUpdateDateTime", "Timestamp"
                };
            });

            project.Selection("Sales.*", settings =>
            {
                //settings.UseStringBuilderForQueries = false;
                settings.AddPagingForGetAllOperation = true;
            });

            //project.Selection("Sales.OrderHeader", settings => settings.AddPagingForGetAllOperation = 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();
        }