Esempio n. 1
0
        public void SetupSqlServer(
            string database,
            string connectionStringName,
            string dbContextName,
            TemplateType templateType,
            GeneratorType generatorType,
            ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            SetupDatabase(connectionStringName, dbContextName, templateType, generatorType, foreignKeyNamingStrategy);

            Settings.ConnectionString = $"Data Source=(local);Initial Catalog={database};Integrated Security=True;Application Name=Generator";
            Settings.DatabaseType     = DatabaseType.SqlServer;
        }
        //[TestCase(ForeignKeyNamingStrategy.LatestMyDbContext
        public void ReverseEngineerPostgreSQL(ForeignKeyNamingStrategy foreignKeyNamingStrategy, string filename, string database)
        {
            // Arrange
            Settings.GenerateSeparateFiles = false;
            Settings.UseMappingTables      = false;
            SetupPostgreSQL(database, "MyDbContext", "MyDbContext", TemplateType.EfCore3, GeneratorType.EfCore, foreignKeyNamingStrategy);

            // Act
            Run(filename, ".PostgreSQL", typeof(EfCoreFileManager), null);

            // Assert
            CompareAgainstTestComparison(filename);
        }
        //[TestCase(ForeignKeyNamingStrategy.Latest)]
        public void ReverseEngineerPostgreSQL(ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = false;
            Settings.UseMappingTables      = false;
            SetupPostgreSQL("Northwind", "MyDbContext", "MyDbContext", TemplateType.EfCore3, GeneratorType.EfCore, foreignKeyNamingStrategy);

            // Act
            var filename = "Northwind";

            Run(filename, ".PostgreSQL", typeof(CustomFileManager), null);

            // Assert
            CompareAgainstTestComparison(filename, true);
        }
        //[TestCase(ForeignKeyNamingStrategy.Latest)]
        public void ReverseEngineerSqlCe(ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = false;
            Settings.UseMappingTables      = true;
            SetupSqlCe("NorthwindSqlCe40.sdf", "MyDbContext", "MyDbContext", TemplateType.Ef6, GeneratorType.Ef6, foreignKeyNamingStrategy);

            // Act
            var filename = "Northwind";

            Run(filename, ".SqlCE", typeof(NullFileManager), null);

            // Assert
            CompareAgainstTestComparison(filename);
        }
        protected static void SetupDatabase(
            string connectionStringName,
            string dbContextName,
            TemplateType templateType,
            GeneratorType generatorType,
            ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;

            ResetFilters();
        }
        public void ReverseEngineer(bool separateFiles, TemplateType templateType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = separateFiles;
            Settings.UseMappingTables      = false;
            SetSettings(NorthwindSqlCeSdfFile, "MyDbContext", "MyDbContext", templateType, GeneratorType.EfCore, foreignKeyNamingStrategy);

            // Act
            var filename  = "Northwind";
            var subFolder = $@"{templateType}NorthwindSqlCe40";

            Run(filename, ".SqlCE", typeof(CustomFileManager), subFolder);

            // Assert
            if (separateFiles)
            {
                CompareAgainstFolderTestComparison(subFolder);
            }
            else
            {
                CompareAgainstTestComparison(filename);
            }
        }
        public void SetupPostgreSQL(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionString           = $"Server=127.0.0.1;Port=5432;Database={database};User Id=testuser;Password=testtesttest;";
            Settings.DatabaseType               = DatabaseType.PostgreSQL;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;

            FilterSettings.Reset();
            FilterSettings.AddDefaults();
            FilterSettings.CheckSettings();
        }
        public void SetupSqlCe(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionString           = @"Data Source=C:\S\Source (open source)\EntityFramework Reverse POCO Code Generator\EntityFramework.Reverse.POCO.Generator\App_Data\" + database;
            Settings.DatabaseType               = DatabaseType.SqlCe;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;

            FilterSettings.Reset();
            FilterSettings.AddDefaults();
            FilterSettings.CheckSettings();
        }
        [TestCase("fred", ".V3FilterTest1", "fred", "FredDbContext", false, TemplateType.EfCore3, ForeignKeyNamingStrategy.Legacy)] // ef core 3
        //[TestCase("fred", ".V3FilterTest1", "fred", "FredDbContext", false, TemplateType.EfCore3, ForeignKeyNamingStrategy.Latest)] // ef core 3
        public void MultipleIncludeFilters(string database, string singleDbContextSubNamespace, string connectionStringName, string dbContextName, bool publicTestComparison, TemplateType templateType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = false;
            Settings.UseMappingTables      = (templateType != TemplateType.EfCore2 && templateType != TemplateType.EfCore3);
            SetupSqlServer(database, connectionStringName, dbContextName, templateType, templateType == TemplateType.Ef6 ? GeneratorType.Ef6 : GeneratorType.EfCore, foreignKeyNamingStrategy);
            Settings.AddUnitTestingDbContext = false;

            FilterSettings.SchemaFilters.Add(new RegexIncludeFilter("dbo.*"));
            FilterSettings.SchemaFilters.Add(new RegexIncludeFilter("Beta.*"));

            FilterSettings.TableFilters.Add(new RegexIncludeFilter("^[Cc]ar.*"));
            FilterSettings.TableFilters.Add(new RegexIncludeFilter("Rebel.*"));
            FilterSettings.TableFilters.Add(new RegexIncludeFilter("Harish.*"));

            // Act
            var filename = database + "IncludeFilter";

            Run(filename, singleDbContextSubNamespace, typeof(NullFileManager), null);

            // Assert
            CompareAgainstTestComparison(filename, publicTestComparison);
        }
        public void SetupSqlServer(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionString           = $"Data Source=(local);Initial Catalog={database};Integrated Security=True;Application Name=Generator";
            Settings.DatabaseType               = DatabaseType.SqlServer;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;

            FilterSettings.Reset();
            FilterSettings.AddDefaults();
            FilterSettings.CheckSettings();
        }
        // Latest
        //[TestCase(false, TemplateType.EfCore2, ForeignKeyNamingStrategy.Latest)]
        //[TestCase(false, TemplateType.EfCore3, ForeignKeyNamingStrategy.Latest)]
        //[TestCase(true, TemplateType.EfCore2, ForeignKeyNamingStrategy.Latest)]
        //[TestCase(true, TemplateType.EfCore3, ForeignKeyNamingStrategy.Latest)]
        public void ReverseEngineerSqlCe_EfCore(bool separateFiles, TemplateType templateType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = separateFiles;
            Settings.UseMappingTables      = false;
            SetupSqlCe("NorthwindSqlCe40.sdf", "MyDbContext", "MyDbContext", templateType, GeneratorType.EfCore, foreignKeyNamingStrategy);

            // Act
            var filename  = "Northwind";
            var subFolder = templateType == TemplateType.EfCore2 ? "TestComparison\\EfCore2NorthwindSqlCe40" : "TestComparison\\EfCore3NorthwindSqlCe40";

            Run(filename, ".SqlCE", typeof(EfCoreFileManager), subFolder);

            // Assert
            if (separateFiles)
            {
                CompareAgainstFolderTestComparison(subFolder);
            }
            else
            {
                CompareAgainstTestComparison(filename);
            }
        }
Esempio n. 12
0
        public void SetSettings(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            connectionStringName ??= "Default";

            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionString           = ConfigurationExtensions.GetConnectionString(connectionStringName, database);
            Settings.DatabaseType               = DatabaseType.SqlServer;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;

            FilterSettings.Reset();
            FilterSettings.AddDefaults();
            FilterSettings.CheckSettings();
        }
        public void SetSettings(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            var factory = DbProviderFactories.GetFactory("Npgsql");

            Assert.IsNotNull(factory);

            var builder = new DbConnectionStringBuilder
            {
                ["Server"]   = "localhost",
                ["Port"]     = "5432",
                ["Database"] = database.ToLower(),
                ["User Id"]  = "testuser",
                ["Password"] = "******"
            };

            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionString           = builder.ConnectionString;
            Settings.DatabaseType               = DatabaseType.PostgreSQL;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;


            FilterSettings.Reset();
            FilterSettings.AddDefaults();
            FilterSettings.CheckSettings();
        }
        public void SetSettings(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            var fi = new FileInfo(database);

            var builder = new DbConnectionStringBuilder
            {
                ["Data Source"] = fi.FullName
            };

            Settings.ForeignKeyNamingStrategy   = foreignKeyNamingStrategy;
            Settings.TemplateType               = templateType;
            Settings.GeneratorType              = generatorType;
            Settings.ConnectionString           = builder.ConnectionString;
            Settings.DatabaseType               = DatabaseType.SqlCe;
            Settings.ConnectionStringName       = connectionStringName;
            Settings.DbContextName              = dbContextName;
            Settings.GenerateSingleDbContext    = true;
            Settings.MultiContextSettingsPlugin = null;
            Settings.Enumerations               = null;
            Settings.PrependSchemaName          = true;
            Settings.DisableGeographyTypes      = false;
            Settings.AddUnitTestingDbContext    = true;

            FilterSettings.Reset();
            FilterSettings.AddDefaults();
            FilterSettings.CheckSettings();
        }
        public void SetupSqlCe(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            SetupDatabase(connectionStringName, dbContextName, templateType, generatorType, foreignKeyNamingStrategy);

            Settings.ConnectionString = @"Data Source=C:\S\Source (open source)\EntityFramework Reverse POCO Code Generator\EntityFramework.Reverse.POCO.Generator\App_Data\" + database;
            Settings.DatabaseType     = DatabaseType.SqlCe;
        }
        public void SetupPostgreSQL(string database, string connectionStringName, string dbContextName, TemplateType templateType, GeneratorType generatorType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            SetupDatabase(connectionStringName, dbContextName, templateType, generatorType, foreignKeyNamingStrategy);

            Settings.ConnectionString = $"Server=127.0.0.1;Port=5432;Database={database};User Id=testuser;Password=testtesttest;";
            Settings.DatabaseType     = DatabaseType.PostgreSQL;
        }
        [TestCase("fred", ".V3TestJ", "fred", "FredDbContext", false, TemplateType.EfCore3, ForeignKeyNamingStrategy.Legacy)]                                  // ef core 3
        // Latest
        //[TestCase("Northwind",      ".V3TestA2", "MyDbContext",      "MyDbContext",             true,  TemplateType.Ef6,     ForeignKeyNamingStrategy.Latest)]
        //[TestCase("EfrpgTest",      ".V3TestB2", "MyDbContext",      "EfrpgTestDbContext",      false, TemplateType.Ef6,     ForeignKeyNamingStrategy.Latest)]
        //[TestCase("EfrpgTestLarge", ".V3TestC2", "MyLargeDbContext", "EfrpgTestLargeDbContext", false, TemplateType.Ef6,     ForeignKeyNamingStrategy.Latest)]
        //[TestCase("fred",           ".V3TestD2", "fred",             "FredDbContext",           false, TemplateType.Ef6,     ForeignKeyNamingStrategy.Latest)]
        //[TestCase("Northwind",      ".V3TestE2", "MyDbContext",      "MyDbContext",             true,  TemplateType.EfCore2, ForeignKeyNamingStrategy.Latest)]
        //[TestCase("Northwind",      ".V3TestK2", "MyDbContext",      "MyDbContext",             true,  TemplateType.EfCore3, ForeignKeyNamingStrategy.Latest)]
        //[TestCase("EfrpgTest",      ".V3TestF2", "MyDbContext",      "EfrpgTestDbContext",      false, TemplateType.EfCore2, ForeignKeyNamingStrategy.Latest)]
        //[TestCase("EfrpgTest",      ".V3TestG2", "MyDbContext",      "EfrpgTestDbContext",      false, TemplateType.EfCore3, ForeignKeyNamingStrategy.Latest)] // ef core 3
        //[TestCase("EfrpgTestLarge", ".V3TestH2", "MyLargeDbContext", "EfrpgTestLargeDbContext", false, TemplateType.EfCore2, ForeignKeyNamingStrategy.Latest)]
        //[TestCase("fred",           ".V3TestI2", "fred",             "FredDbContext",           false, TemplateType.EfCore2, ForeignKeyNamingStrategy.Latest)]
        //[TestCase("fred",           ".V3TestJ2", "fred",             "FredDbContext",           false, TemplateType.EfCore3, ForeignKeyNamingStrategy.Latest)] // ef core 3
        public void ReverseEngineerSqlServer(string database, string singleDbContextSubNamespace, string connectionStringName, string dbContextName, bool publicTestComparison, TemplateType templateType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = false;
            Settings.UseMappingTables      = (templateType != TemplateType.EfCore2 && templateType != TemplateType.EfCore3);
            SetupSqlServer(database, connectionStringName, dbContextName, templateType, templateType == TemplateType.Ef6 ? GeneratorType.Ef6 : GeneratorType.EfCore, foreignKeyNamingStrategy);
            //Settings.DisableGeographyTypes = true;

            Settings.Enumerations = new List <EnumerationSettings>
            {
                new EnumerationSettings
                {
                    Name       = "DaysOfWeek",          // Enum to generate. e.g. "DaysOfWeek" would result in "public enum DaysOfWeek {...}"
                    Table      = "EnumTest.DaysOfWeek", // Database table containing enum values. e.g. "DaysOfWeek"
                    NameField  = "TypeName",            // Column containing the name for the enum. e.g. "TypeName"
                    ValueField = "TypeId"               // Column containing the values for the enum. e.g. "TypeId"
                },
                new EnumerationSettings
                {
                    Name       = "Invalid",
                    Table      = "x",
                    NameField  = "y",
                    ValueField = "z"
                },
                new EnumerationSettings
                {
                    Name       = "CarOptions",
                    Table      = "EnumsWithStringAsValue",
                    NameField  = "enum_name",
                    ValueField = "value"
                }
            };

            // Act
            Run(database, singleDbContextSubNamespace, typeof(NullFileManager), null);

            // Assert
            CompareAgainstTestComparison(database, publicTestComparison);
        }
Esempio n. 18
0
        /*[Test] // Always run all cases together as they build up ReverseNavigationUniquePropName
         * // checkForFkNameClashes = true
         * [TestCase("01", "Burak2", "Burak1", "Id|IdT|Num", true, "Burak2", true, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id")]
         * [TestCase("02", "Burak1", "Burak2", "Id|Num", false, "Burak1", true, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id")]
         * [TestCase("03", "Burak2", "Burak1", "Id|IdT|Num", true, "Burak2", true, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id_t")]
         * [TestCase("04", "Burak1", "Burak2", "Id|Num", false, "Burak1", true, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id_t")]
         * [TestCase("05", "Car", "Colour", "Id|Name", false, "Car", true, false, Relationship.OneToMany, "Car", "Colour", true, "PrimaryColourId")]
         * [TestCase("06", "Car", "CarToColour", "CarId|ColourId", true, "Car", true, true, Relationship.ManyToOne, "CarToColour", "Car", true, "CarId")]
         * [TestCase("07", "CarToColour", "Car", "Id|PrimaryColourId|CarMake|ComputedColumn|ComputedColumnPersisted", false, "CarToColour", true, false, Relationship.OneToMany, "CarToColour", "Car", true, "CarId")]
         * [TestCase("08", "CarToColour", "Colour", "Id|Name", false, "CarToColour", true, false, Relationship.OneToMany, "CarToColour", "Colour", true, "ColourId")]
         * [TestCase("09", "User", "UserDocument", "Id|UserId|CreatedByUserId", true, "User", true, true, Relationship.ManyToOne, "User_Document", "User", true, "CreatedByUserID")]
         * [TestCase("10", "UserDocument", "User", "Id|ExternalUserId", false, "UserDocument", true, false, Relationship.OneToMany, "User_Document", "User", true, "CreatedByUserID")]
         * [TestCase("11", "User", "UserDocument", "Id|UserId|CreatedByUserId", true, "User", true, true, Relationship.ManyToOne, "User_Document", "User", true, "UserID")]
         * [TestCase("12", "UserDocument", "User", "Id|ExternalUserId", false, "UserDocument", true, false, Relationship.OneToMany, "User_Document", "User", true, "UserID")]
         * // checkForFkNameClashes = false
         * [TestCase("13", "Burak2", "Burak1", "Id|IdT|Num", true, "Burak2", false, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id")]
         * [TestCase("14", "Burak1", "Burak2", "Id|Num", false, "Burak1", false, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id")]
         * [TestCase("15", "Burak2", "Burak1", "Id|IdT|Num", true, "Burak2", false, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id_t")]
         * [TestCase("16", "Burak1", "Burak2", "Id|Num", false, "Burak1", false, true, Relationship.OneToOne, "Burak1", "Burak2", true, "id_t")]
         * [TestCase("17", "Car", "Colour", "Id|Name", false, "Car", false, false, Relationship.OneToMany, "Car", "Colour", true, "PrimaryColourId")]
         * [TestCase("18", "Car", "CarToColour", "CarId|ColourId", true, "Car", false, true, Relationship.ManyToOne, "CarToColour", "Car", true, "CarId")]
         * [TestCase("19", "CarToColour", "Car", "Id|PrimaryColourId|CarMake|ComputedColumn|ComputedColumnPersisted", false, "CarToColour", false, false, Relationship.OneToMany, "CarToColour", "Car", true, "CarId")]
         * [TestCase("20", "CarToColour", "Colour", "Id|Name", false, "CarToColour", false, false, Relationship.OneToMany, "CarToColour", "Colour", true, "ColourId")]
         * [TestCase("21", "User", "UserDocument", "Id|UserId|CreatedByUserId", true, "User", false, true, Relationship.ManyToOne, "User_Document", "User", true, "CreatedByUserID")]
         * [TestCase("22", "UserDocument", "User", "Id|ExternalUserId", false, "UserDocument", false, false, Relationship.OneToMany, "User_Document", "User", true, "CreatedByUserID")]
         * [TestCase("23", "User", "UserDocument", "Id|UserId|CreatedByUserId", true, "User", false, true, Relationship.ManyToOne, "User_Document", "User", true, "UserID")]
         * [TestCase("24", "UserDocument", "User", "Id|ExternalUserId", false, "UserDocument", false, false, Relationship.OneToMany, "User_Document", "User", true, "UserID")]
         * public void LatestForeignKeyNames(string testOrder, string expected, string NameHumanCase, string columns, bool isParent, string tableNameHumanCase, bool checkForFkNameClashes,
         *  bool makeSingular, Relationship relationship, string fkTableName, string pkTableName, bool includeReverseNavigation, string fkColumn)
         * {
         *  Console.WriteLine(testOrder); // Keep this field to make sure test cases run in order as it's important
         *
         *  // Arrange
         *  var (table, foreignKey) = PrepareTest(NameHumanCase, columns, fkTableName, pkTableName, includeReverseNavigation, fkColumn, ForeignKeyNamingStrategy.Latest);
         *
         *  // Act
         *  var result = table.GetUniqueForeignKeyName(isParent, tableNameHumanCase, foreignKey, checkForFkNameClashes, makeSingular, relationship);
         *
         *  // Assert
         *  Assert.AreEqual(expected, result);
         *  Assert.AreEqual(ForeignKeyNamingStrategy.Latest, Settings.ForeignKeyNamingStrategy);
         * }*/

        private (Table table, ForeignKey foreignKey) PrepareTest(string NameHumanCase, string columns, string fkTableName, string pkTableName, bool includeReverseNavigation, string fkColumn, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            var table = tables.FirstOrDefault(x => x.NameHumanCase == NameHumanCase);

            if (table == null)
            {
                Settings.ForeignKeyNamingStrategy = foreignKeyNamingStrategy;
                table = new Table(null, new Schema("dbo"), NameHumanCase, false)
                {
                    NameHumanCase = NameHumanCase
                };
                foreach (var col in columns.Split('|'))
                {
                    table.Columns.Add(new Column {
                        NameHumanCase = col
                    });
                }

                tables.Add(table);
            }

            var foreignKey = new ForeignKey(fkTableName, "dbo", pkTableName, "dbo", fkColumn, "", "", "", "", 1, false, false, "", "", true)
            {
                IncludeReverseNavigation = includeReverseNavigation
            };

            return(table, foreignKey);
        }
Esempio n. 19
0
        public void ReverseEngineerSqlServer(string database, string singleDbContextSubNamespace, string connectionStringName, string dbContextName, TemplateType templateType, ForeignKeyNamingStrategy foreignKeyNamingStrategy)
        {
            // Arrange
            Settings.GenerateSeparateFiles = false;
            Settings.UseMappingTables      = (templateType != TemplateType.EfCore2 && templateType != TemplateType.EfCore3);
            SetupSqlServer(database, connectionStringName, dbContextName, templateType, templateType == TemplateType.Ef6 ? GeneratorType.Ef6 : GeneratorType.EfCore, foreignKeyNamingStrategy);
            if (templateType == TemplateType.EfCore5) // Don't do all, as we want a mix of true/false for this field.
            {
                Settings.TrimCharFields = true;
            }
            else
            {
                Settings.TrimCharFields = false;
            }

            Settings.Enumerations = new List <EnumerationSettings>
            {
                new EnumerationSettings
                {
                    Name       = "DaysOfWeek",          // Enum to generate. e.g. "DaysOfWeek" would result in "public enum DaysOfWeek {...}"
                    Table      = "EnumTest.DaysOfWeek", // Database table containing enum values. e.g. "DaysOfWeek"
                    NameField  = "TypeName",            // Column containing the name for the enum. e.g. "TypeName"
                    ValueField = "TypeId"               // Column containing the values for the enum. e.g. "TypeId"
                },
                new EnumerationSettings
                {
                    Name       = "Invalid",
                    Table      = "x",
                    NameField  = "y",
                    ValueField = "z"
                },
                new EnumerationSettings
                {
                    Name       = "CarOptions",
                    Table      = "EnumsWithStringAsValue",
                    NameField  = "enum_name",
                    ValueField = "value"
                }
            };

            var enumDefinitions = new List <EnumDefinition>
            {
                new EnumDefinition {
                    Schema = "EnumTest", Table = "OpenDays", Column = "TypeId", EnumType = "DaysOfWeek"
                }
            };

            // Act
            Run(database, singleDbContextSubNamespace, typeof(NullFileManager), null, enumDefinitions);

            // Assert
            CompareAgainstTestComparison(database);
        }