/// <summary> /// Creates a CS file that inherits from BaseMigration that will execute the SQL schema changes. /// </summary> /// <param name="criteria">description of what to do and where to put the file</param> public void CreateScript(CreationCriteria criteria) { var configurationStatus = GetMigrationConfigurationStatus(criteria.ProjectFileLocation, criteria.RepoName); if (!configurationStatus.Enabled) { LoggerBase.Log("Migrations are not enabled, can not create any migrations."); return; } if (configurationStatus.MigrationType != MigrationToUse.Manual) { LoggerBase.Log("Manual Migrations are not enabled, can not create manual migrations."); return; } var repoInfo = TypeHandler.FindSingleRepo(criteria.ProjectFileLocation, criteria.RepoName); //if null we need to drop out. if (repoInfo == null) { LoggerBase.Log("Unable to find repo"); return; } AssertRepoHasEmptyConstructor(repoInfo.RepoType); EnsureDbAndMigrationTableExists(criteria.ProjectFileLocation, repoInfo.RepoType, criteria.ConfigFilePath); //ensure that we have the case correct. criteria.RepoName = repoInfo.RepoType.Name; var configuration = TypeHandler.FindConfiguration(criteria.ProjectFileLocation, repoInfo.RepoType); //if null something bad happend, drop out if (configuration == null) { LoggerBase.Log("unable to find configuration file"); return; } var updater = CreateSchemaUpdater(repoInfo.Assembly.Location, repoInfo.RepoType, criteria.ConfigFilePath); var fileMigrationHandler = new MigrationFileHandler(updater); var projectFileHandler = new ProjectDteHelper(); //set the mgiration folder form config: criteria.MigrationPath = configuration.RootMigrationFolder; var filePath = fileMigrationHandler.CreateFile(criteria); projectFileHandler.AddFile(criteria.ProjectFileLocation, configuration.RootMigrationFolder, filePath, showFile: true); LoggerBase.Log("Created migration file."); //clean up ProjectEvalutionHelper.FinishedWithProject(criteria.ProjectFileLocation); }
private void AddMigration(string[] args) { var criteriaParmas = ParseParams(args); var criteria = new CreationCriteria { ProjectFileLocation = criteriaParmas.ProjectPath, FileName = criteriaParmas.MigrationName, RepoName = criteriaParmas.OptionalRepoName, ConfigFilePath = criteriaParmas.ConfigFilePath, }; var setup = new SchemaSetup(); setup.CreateScript(criteria); }
public string CreateFile(CreationCriteria criteria) { var projectNamespace = new ProjectEvalutionHelper().RootNameSpace(criteria.ProjectFileLocation); var migrationFileInfo = GenerateFileLocation(criteria); if (!Directory.Exists(migrationFileInfo.Folder)) { Directory.CreateDirectory(migrationFileInfo.Folder); } //if it already exists delete it.. it should not at this point. this is a just incase. if (File.Exists(migrationFileInfo.FullFilePath)) { File.Delete(migrationFileInfo.FullFilePath); } _schemaUpdater.Execute(_logScript, false); var fileBuilder = new StringBuilder(); fileBuilder.AppendLine("using NHibernateRepo.Migrations;"); fileBuilder.AppendLine("using System;"); fileBuilder.AppendLine(""); fileBuilder.AppendLine(string.Format("namespace {0}.{1}", projectNamespace, criteria.MigrationPath.Replace("\\", ".").Replace("-", "."))); fileBuilder.AppendLine("{"); fileBuilder.AppendLine(" public class " + migrationFileInfo.ClassName + " : BaseMigration<" + criteria.RepoName + ">"); fileBuilder.AppendLine(" {"); fileBuilder.AppendLine(" public override void Execute()"); fileBuilder.AppendLine(" {"); foreach (var script in Scripts) { fileBuilder.AppendLine(" "); fileBuilder.AppendLine(" ExecuteSql(@\"" + script +"\");"); } fileBuilder.AppendLine(" "); fileBuilder.AppendLine(" }"); fileBuilder.AppendLine(" }"); fileBuilder.AppendLine("}"); File.WriteAllText(migrationFileInfo.FullFilePath, fileBuilder.ToString()); return migrationFileInfo.FullFilePath; }