public void SelfReferencingOneToManyWorks() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetSelfReferencingOneToManySchema(), new SqlServerDialect(), null, null, true); Assert.Equal(RelationshipType.ManyToOne, maps.First().Columns["Parent"].Relationship); }
public void OneToOneSelfReferencingRelationshipSetCorrectly() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetSelfReferencingOneToOneSchema(), new SqlServerDialect(), null, null, true); Assert.Equal(RelationshipType.OneToOne, maps.First().Columns["References"].Relationship); Assert.Equal(RelationshipType.OneToOne, maps.First().Columns["ReferencedBy"].Relationship); }
public void OneToOneSelfReferencingOppositeColumnSetCorrectly() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetSelfReferencingOneToOneSchema(), new SqlServerDialect(), null, null, true); Assert.Equal("ReferencedBy", maps.First().Columns["References"].OppositeColumn.Name); Assert.Equal("References", maps.First().Columns["ReferencedBy"].OppositeColumn.Name); }
public void PeopleSingularized() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetPeopleSchema(), new SqlServerDialect(), null, null, false); Assert.Equal("Person", maps.First().Type.Name); }
public void OneToOneOppositeColumnSetCorrectly() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetOneToOneSchema(), new SqlServerDialect(), null, null, true); Assert.Equal("Customer", maps.First(m => m.Table == "Customers").Columns["Person"].OppositeColumn.Name); Assert.Equal("Person", maps.First(m => m.Table == "People").Columns["Customer"].OppositeColumn.Name); }
public void AutoIncSetCorrectly() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetSchema(), new SqlServerDialect(), null, null, false); Assert.True(maps.First(m => m.Table == "Posts").PrimaryKey.IsAutoGenerated); }
public void ManyToOneSetCorrectly() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetSchema(), new SqlServerDialect(), null, null, false); Assert.True(maps.First(m => m.Table == "Posts").Columns.First(c => c.Key == "Blog").Value.Relationship == RelationshipType.ManyToOne); }
public void PrimaryKeySetCorrectly() { var engineer = new Engineer(new List<KeyValuePair<string, string>>()); var maps = engineer.ReverseEngineer(this.GetSchema(), new SqlServerDialect(), null, null, false); Assert.Equal("PostId", maps.First(m => m.Table == "Posts").PrimaryKey.Name); }
private static string GenerateMigrationScript( ConnectionStringSettings connectionStringSettings, ReverseEngineerSettings reverseEngineerSettings, IConfiguration configuration, bool naive, out IEnumerable<string> warnings, out IEnumerable<string> errors) { // fetch the from state var dialectFactory = new DialectFactory(); var dialect = dialectFactory.Create(connectionStringSettings.ToSystem()); var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName); // create database if not exists CreateDatabaseIfNotExists(connectionStringSettings, factory, dialect); DatabaseSchema schema; using (new TimedOperation("-- Reading database contents...")) { var databaseReader = new DatabaseReader(connectionStringSettings.ConnectionString, connectionStringSettings.ProviderName); schema = databaseReader.ReadAll(); } IEnumerable<IMap> fromMaps; using (new TimedOperation("-- Reverse engineering...")) { Console.WriteLine(); var engineer = new Engineer(reverseEngineerSettings.ExtraPluralizationWords); fromMaps = engineer.ReverseEngineer(schema, dialect, reverseEngineerSettings.GetTablesToIgnore(), consoleAnswerProvider, false); Console.Write("-- "); } using (var connection = factory.CreateConnection()) { connection.ConnectionString = connectionStringSettings.ConnectionString; // set up migrator IMigrator migrator; if (naive) { throw new NotSupportedException("The Naive Migrator is no longer supported"); } migrator = new Migrator( dialect, new CreateTableWriter(dialect), new AlterTableWriter(dialect), new DropTableWriter(dialect), new StatisticsProvider(connection, dialect)); // run the migrator string script; using (new TimedOperation("-- Generating diff...")) { script = migrator.GenerateSqlDiff( fromMaps, configuration.Maps, consoleAnswerProvider, new ConsoleLogger(isVerbose), reverseEngineerSettings.GetIndexesToIgnore(), out warnings, out errors); // TODO: do things with warnings and errors return script; } } }
private static void DoReverseEngineer( CommandLineOptions options, DashingSettings dashingSettings, ReverseEngineerSettings reverseEngineerSettings, ConnectionStringSettings connectionString) { // overwrite the path with the default if necessary if (string.IsNullOrEmpty(options.Location)) { options.Location = dashingSettings.DefaultSavePath; } // if it is still empty, ... if (string.IsNullOrEmpty(options.Location) && options.ReverseEngineer) { throw new CatchyException("You must specify a location for generated files to be saved"); } // require a generated namespace if (string.IsNullOrEmpty(reverseEngineerSettings.GeneratedNamespace)) { throw new CatchyException("You must specify a GeneratedNamespace in the Project ini file"); } DatabaseSchema schema; var engineer = new Engineer(reverseEngineerSettings.ExtraPluralizationWords); var databaseReader = new DatabaseReader(connectionString.ConnectionString, connectionString.ProviderName); schema = databaseReader.ReadAll(); var maps = engineer.ReverseEngineer( schema, new DialectFactory().Create(connectionString.ToSystem()), reverseEngineerSettings.GetTablesToIgnore(), consoleAnswerProvider, true); var reverseEngineer = new ModelGenerator(); var sources = reverseEngineer.GenerateFiles(maps, schema, reverseEngineerSettings.GeneratedNamespace, consoleAnswerProvider); foreach (var source in sources) { File.WriteAllText(options.Location + "\\" + source.Key + ".cs", source.Value); } }
public void OneToOneRelationshipSetCorrectly() { var engineer = new Engineer(string.Empty); var maps = engineer.ReverseEngineer(this.GetOneToOneSchema(), new SqlServerDialect(), null, null, true); Assert.Equal(RelationshipType.OneToOne, maps.First(m => m.Table == "Customers").Columns["Person"].Relationship); Assert.Equal(RelationshipType.OneToOne, maps.First(m => m.Table == "People").Columns["Customer"].Relationship); }
public void PeopleSingularized() { var engineer = new Engineer(string.Empty); var maps = engineer.ReverseEngineer(this.GetPeopleSchema(), new SqlServerDialect(), null, null, false); Assert.Equal("Person", maps.First().Type.Name); }