/// <summary> /// Initializes the database. /// </summary> /// <param name="context">The context.</param> /// <inheritdoc /> public virtual void InitializeDatabase(TContext context) { if (_config == null) { _config = new TMigrationsConfiguration { TargetDatabase = new DbConnectionInfo(context.Database.Connection.ConnectionString, "System.Data.SqlClient") }; } var seed = !context.Database.Exists(); var migrator = new DbMigrator(_config); if (!seed) { var local = migrator.GetLocalMigrations(); var pending = migrator.GetPendingMigrations(); if (local.Count() == pending.Count()) { seed = true; } } migrator.Update(); InitializeDbSettings(context); if (seed) { Seed(context); } }
private static IEnumerable <string> GetPendingResourceMigrations(DbMigrator migrator, string resHead) { var local = migrator.GetLocalMigrations(); var atHead = false; if (local.Last().IsCaseInsensitiveEqual(resHead)) { yield break; } foreach (var id in local) { if (!atHead) { if (!id.IsCaseInsensitiveEqual(resHead)) { continue; } else { atHead = true; continue; } } yield return(id); } }
private string GetScriptFromMigrations() { var type = typeof(T); var fenixAttr = type.CustomAttributes.Where(x => x.AttributeType == typeof(FenixAttribute)).FirstOrDefault(); if (fenixAttr != null) { var migrations = (fenixAttr.ConstructorArguments.First().Value as ReadOnlyCollection <CustomAttributeTypedArgument>).Select(x => x.Value.ToString()).ToArray(); var migrator = new DbMigrator(Configuration); var allMigrations = migrator.GetLocalMigrations().ToList(); var scriptor = new MigratorScriptingDecorator(migrator); string allMigrationScripts = null; foreach (var migration in migrations) { var target = allMigrations.Where(x => x.Contains(migration)).First(); var targetIndex = allMigrations.IndexOf(target); var source = targetIndex == 0 ? "0" : Regex.Match(allMigrations.Where(x => allMigrations.IndexOf(x) == (targetIndex - 1)).First(), @"(?<=\d+_).+").Value; string script = scriptor.ScriptUpdate(source, target); allMigrationScripts += $"{ExtractScriptFromMigration(script, source)}{"\r\n"}"; } return(allMigrationScripts.Trim()); } return(null); }
void IDatabaseInitializer <TContext> .InitializeDatabase(TContext context) { Contract.Requires(context != null, "context"); if (context.Database.Exists()) { var shouldCreate = false; try { if (!context.Database.CompatibleWithModel(throwIfNoMetadata: true)) { try { shouldCreate = true; if (!context.Database.CompatibleWithModel(throwIfNoMetadata: false)) { shouldCreate = false; Console.WriteLine("Updating Database..."); var migrator = new DbMigrator(_configuration); migrator.Update(); } } catch (Exception e) { Console.WriteLine(e); } } } catch (Exception ex) { shouldCreate = true; } if (shouldCreate) { try { Console.WriteLine("Running Migrations..."); var migrator = new DbMigrator(_configuration); foreach (var localMigration in migrator.GetLocalMigrations()) { migrator.Update(localMigration); } Seed(context); context.SaveChanges(); } catch (Exception e) { Console.WriteLine(e); } } } else { Console.WriteLine("Creating Database..."); context.Database.Create(); Seed(context); context.SaveChanges(); } }
private void TestSqlGeneration <T>(DbMigrationsConfiguration <T> configuration) where T : DbContext { var migrator = new DbMigrator(configuration); var scriptingMigrator = new MigratorScriptingDecorator(migrator); var migrations = migrator.GetLocalMigrations().OrderBy(c => c).ToList(); // NOTE: go from first to annotateTable var str = scriptingMigrator.ScriptUpdate(migrations.First(c => c.Contains("first")), migrations.First(c => c.Contains("annotate"))); }
/// <summary> /// Проверяет установлена ли последняя миграция /// </summary> /// <returns>Результат проверки миграций</returns> public string CheckLastMigration() { var migrator = new DbMigrator(_configuration); var targetMigration = migrator.GetLocalMigrations().ToList(); var targetMigrationDb = migrator.GetDatabaseMigrations(null, false).ToList(); return(migrator.CheckMigrations(targetMigration.LastOrDefault(), targetMigrationDb.LastOrDefault(), false)); }
private static void ShowAll(DbManagerOptions options) { var migrator = new DbMigrator(new TMigrationConfig()); Logger.Info("Возможный следующие миграции:"); migrator.GetLocalMigrations().ForEach(m => Logger.Info(m)); Logger.Info("Миграции примененные к базе данных:"); migrator.GetDatabaseMigrations().ForEach(m => Logger.Info(m)); }
/// <summary> /// Возвращает Id для последней миграции /// </summary> /// <param name="migrator">Мигратор</param> /// <param name="downgrade">Является ли операция миграции</param> /// <returns>Id миграции</returns> private string GetLastMigrationId(DbMigrator migrator, bool downgrade) { var targetMigration = migrator.GetLocalMigrations().ToList(); if (targetMigration.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, null)); } return(downgrade ? null : targetMigration.Last()); }
public static void GenerateSQLScript() { #if DEBUG var migrator = new DbMigrator(new Configuration()); var scriptor = new MigratorScriptingDecorator(migrator); var migration = migrator.GetLocalMigrations().LastOrDefault(); var sql = scriptor.ScriptUpdate("0", migration); string info = $"-- ========================================== --\r\n-- Current Migration: {migration}\r\n-- ========================================== --\r\n\r\n"; const string fileName = "OpenNos.sql"; File.WriteAllText(Path.Combine(@"../../../OpenNos.DAL.EF/DB/", fileName), info + sql); #endif }
/// <summary> /// Возвращает Id миграции по версии миграции /// </summary> /// <param name="migrator">Мигратор</param> /// <param name="version">Номер версии</param> /// <returns>Id миграции</returns> private string GetMigrationIdByMigrationVersion(DbMigrator migrator, string version) { var targetMigration = migrator.GetLocalMigrations() .Where(s => s.ToLowerInvariant().StartsWith(version.ToLowerInvariant())) .ToList(); if (targetMigration.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, version)); } return(targetMigration.Last()); }
internal static Tuple <IEnumerable <string>, IEnumerable <string>, IEnumerable <string> > GetMigrationsInfo() { try { var migrator = new DbMigrator(new Migrations.Configuration()); return(Tuple.Create(migrator.GetDatabaseMigrations(), migrator.GetLocalMigrations(), migrator.GetPendingMigrations())); } catch (MigrationsException ex) { throw new DataAccessException("Failed to retreive migrations information", ex); } }
public static void UpdateDatabase(string connectionString) { var configuration = new Configuration { TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient") }; var migrator = new DbMigrator(configuration); var pending = migrator.GetPendingMigrations().ToArray(); var local = migrator.GetLocalMigrations().ToArray(); var db = migrator.GetDatabaseMigrations().ToArray(); migrator.Update(); }
public void NoPendingMigrations() { var currentTimestamp = DateTimeOffset.UtcNow.ToString("yyyyMMddHHmmssFFFFFFF"); _dbName = $"PendingMigrationsTest{currentTimestamp}Validation"; var connectionString = $@"Data Source=(localdb)\mssqllocaldb; Initial Catalog={_dbName}; Integrated Security=True; MultipleActiveResultSets=True"; var migrationsConfiguration = new ValidationMigrationsConfiguration { TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient"), }; var dbMigrator = new DbMigrator(migrationsConfiguration); var migrations = dbMigrator.GetLocalMigrations(); dbMigrator.Update(migrations.Last()); var migrationScaffolder = new MigrationScaffolder(dbMigrator.Configuration); var migrationName = $"TestMigration{currentTimestamp}"; var result = migrationScaffolder.Scaffold(migrationName); _output.WriteLine("Migration content:"); _output.WriteLine(new string('-', 60)); _output.WriteLine(result.UserCode); _output.WriteLine(new string('-', 60)); Assert.Equal( $@"namespace {dbMigrator.Configuration.MigrationsNamespace} {{ using System; using System.Data.Entity.Migrations; public partial class {migrationName} : DbMigration {{ public override void Up() {{ }} public override void Down() {{ }} }} }} ", result.UserCode); }
public void InitializeDatabase(DbContext2Database context) { Contract.Requires(context != null, "context"); var configuration = new DbContext2MigrationsConfiguration() { TargetDatabase = new DbConnectionInfo(_connection) }; if (!context.Database.Exists() || !context.Database.CompatibleWithModel(throwIfNoMetadata: false)) { var migrator = new DbMigrator(configuration); string[] pastMigrations = migrator.GetDatabaseMigrations().OrderBy(s => s).ToArray(); string[] knownMigrations = migrator.GetLocalMigrations().OrderBy(s => s).ToArray(); string[] pendingMigrations = migrator.GetPendingMigrations().OrderBy(s => s).ToArray(); Console.Out.WriteLine("Known migrations:"); foreach (var m in knownMigrations) { Console.Out.WriteLine(m); } Console.Out.WriteLine("Past migrations:"); foreach (var m in pastMigrations) { Console.Out.WriteLine(m); } Console.Out.WriteLine("Pending migrations:"); foreach (var m in pendingMigrations) { Console.Out.WriteLine(m); } if (!pendingMigrations.Any()) { Console.Out.WriteLine($"Database mismatch: exists={context.Database.Exists()} and compatibility={context.Database.CompatibleWithModel(throwIfNoMetadata: false)} but there are no migrations pending."); } foreach (string s in migrator.GetPendingMigrations()) { Console.Out.WriteLine($"Applying database migration {s}."); migrator.Update(s); } } context.SaveChanges(); }
public void Initialize(MockConnection solrConnection) { //if (SolrService.IsInitialized) //{ // //TODO: Inject the new connection into this current solr thread. //} //else //{ // SolrService.ForceInit(solrConnection); //} SolrService.ForceInit(solrConnection); try { Catfish.Tests.Migrations.Configuration config = new Catfish.Tests.Migrations.Configuration(); var migrator = new DbMigrator(config); foreach (string migName in migrator.GetLocalMigrations()) { Type migration = config.MigrationsAssembly.GetType(string.Format("{0}.{1}", config.MigrationsNamespace, migName.Substring(16))); DbMigration m = (DbMigration)Activator.CreateInstance(migration); m.Up(); var prop = m.GetType().GetProperty("Operations", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (prop != null) { IEnumerable <MigrationOperation> operations = prop.GetValue(m) as IEnumerable <MigrationOperation>; var generator = config.GetSqlGenerator("System.Data.SQLite"); var statements = generator.Generate(operations, "2008"); foreach (MigrationStatement item in statements) { Db.Database.ExecuteSqlCommand(item.Sql); } } } } catch (Exception ex) { throw ex; } }
/// <summary> /// Возвращает Id миграции по имени /// </summary> /// <param name="migrator">Мигратор</param> /// <param name="migration">Название миграции</param> /// <returns>Id миграции</returns> private string GetMigrationIdByMigrationName(DbMigrator migrator, string migration) { var targetMigration = migrator.GetLocalMigrations() .Where(s => s.ToLowerInvariant().Contains(migration.ToLowerInvariant())) .ToList(); if (targetMigration.Count > 1) { throw new MigrationsException(string.Format(Constants.NotUniqMigration, Environment.NewLine, targetMigration.Join(separator: Environment.NewLine))); } if (targetMigration.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, migration)); } return(targetMigration.First()); }
public virtual IEnumerable <MigrationInfo> GetMigrations(String contextTypeName) { var contextType = GetContextType(contextTypeName); var configurationType = GetConfigurationType(contextType); var configuration = CreateConfiguration(configurationType); var migrator = new DbMigrator(configuration); var migrations = new Dictionary <String, MigrationInfo>(); Func <String, MigrationInfo> getInfo = migrationId => { MigrationInfo info; if (!migrations.TryGetValue(migrationId, out info)) { info = new MigrationInfo { Id = migrationId }; migrations.Add(migrationId, info); } return(info); }; foreach (var migrationId in migrator.GetDatabaseMigrations()) { var info = getInfo.Invoke(migrationId); info.InDatabase = true; } foreach (var migrationId in migrator.GetLocalMigrations()) { var info = getInfo.Invoke(migrationId); info.InProject = true; } return(migrations.Values.OrderBy(i => i.Id)); }
/// <summary> /// Initializes the database. /// </summary> /// <param name="context">The context.</param> /// <inheritdoc /> public virtual void InitializeDatabase(TContext context) { if (_config == null) { _config = new TMigrationsConfiguration { TargetDatabase = new DbConnectionInfo(context.Database.Connection.ConnectionString, "System.Data.SqlClient") }; } var seed = !context.Database.Exists(); var migrator = new DbMigrator(_config); if (!seed) { var local = migrator.GetLocalMigrations(); var pending = migrator.GetPendingMigrations(); if (local.Count() == pending.Count()) { seed = true; } } try { migrator.Update(); } catch (SqlException ex) { throw new ApplicationException(String.Format("Migrations failed with error \"{0}\"", ex.ExpandExceptionMessage()), ex); } InitializeDbSettings(context); if (seed) { Seed(context); } }
private void EnsureAllExplicitMigrationsAddedAndMigrate(TContext context, DbMigrator migrator) { var pendinMigrations = migrator.GetPendingMigrations().Count(); var localMigrations = migrator.GetLocalMigrations().Count(); var exists = context.Database.Exists(); if (!exists || pendinMigrations > 0) { try { migrator.Update(); } catch (SqlException) { throw new ApplicationException(); } if (pendinMigrations == localMigrations) { Seed(context); } } }
/// <summary> /// Проверяет наличие миграции в БД по ее версии /// </summary> /// <param name="version">Версия миграции</param> /// <returns>Результат проверки миграций</returns> public string CheckByVersion(string version) { var migrator = new DbMigrator(_configuration); var targetMigration = migrator.GetLocalMigrations() .Where(s => s.ToLowerInvariant().StartsWith(version.ToLowerInvariant())) .ToList(); if (targetMigration.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, version)); } var targetMigrationDb = migrator.GetDatabaseMigrations(version, true).ToList(); if (targetMigrationDb.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, version)); } return(migrator.CheckMigrations(targetMigration.Last(), targetMigrationDb.Last(), true)); }
/// <summary> /// Ищет конкретную миграцию в БД по имени миграции /// </summary> /// <param name="migration">Название миграции</param> /// <returns>Результат проверки миграций</returns> public string CheckByMigrationName(string migration) { var migrator = new DbMigrator(_configuration); var targetMigration = migrator.GetLocalMigrations() .Where(s => s.ToLowerInvariant().Contains(migration.ToLowerInvariant())) .ToList(); if (targetMigration.Count > 1) { throw new MigrationsException(string.Format(Constants.NotUniqMigration, Environment.NewLine, targetMigration.Join(separator: Environment.NewLine))); } if (targetMigration.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, migration)); } var targetMigrationDb = migrator.GetDatabaseMigrations(migration, false).ToList(); if (targetMigrationDb.Count > 1) { throw new MigrationsException(string.Format(Constants.NotUniqMigration, Environment.NewLine, targetMigrationDb.Join(separator: Environment.NewLine))); } if (targetMigrationDb.Count == 0) { throw new MigrationsException(string.Format(Constants.MigrationNotFound, migration)); } return(migrator.CheckMigrations(targetMigration.First(), targetMigrationDb.First(), false)); }
public void MigrateDatabase() { //Arrange Animals.Migrations.Configuration config = new Configuration(); DbMigrator migrator = new DbMigrator(config); Console.WriteLine("Past migrations:"); foreach (string s in migrator.GetDatabaseMigrations()) { Console.WriteLine(s); } Console.WriteLine("Local migrations:"); foreach (string s in migrator.GetLocalMigrations()) { Console.WriteLine(s); } Console.WriteLine("Pending migrations:"); foreach (string s in migrator.GetPendingMigrations()) { Console.WriteLine(s); } Console.WriteLine("Migrating..."); foreach (string s in migrator.GetPendingMigrations()) { //Act Console.WriteLine("Applying migration {0}", s); Action act = () => migrator.Update(s); //Assert act.ShouldNotThrow(); } }
/// <summary> /// Gets array of all versions /// </summary> /// <returns>Array of versions</returns> public string[] GetAllVersions() { return(_migrator.GetLocalMigrations().OrderBy(m => m).ToArray()); }
public static void MigrateDatabase(Tenant tenant) //string DBName/*VentasDBContext ctx*/) { //context.Database.Create(); //var datab = context.Database; //Tenant tenant = new Tenant(); using (var context = new TenantsDBContext()) { //tenant.BaseDeDatos = DBName; tenant.ConnectionString = "data source=DESKTOP-JSIT42C\\SQLEXPRESS; MultipleActiveResultSets=true ;initial catalog=" + tenant.BaseDeDatos + "; integrated security=SSPI"; tenant.Host = (System.Environment.MachineName == "DESKTOP-JSIT42C") ? "DESKTOP-JSIT42C\\SQLEXPRESS" : "localhost"; tenant.Nombre = tenant.BaseDeDatos; context.Tenants.Add(tenant); context.SaveChanges(); } Common.TenantData.tenant = tenant; //using (var context = new VentasDBContext(tenant.ConnectionString)) //{ // UltimoDiario u = new UltimoDiario(); // u.UltimaFechaImpresion = tenant.FechaImpresionUltimoDiario; // u.UltimoNumeroAsiento = 1; // u.UltimoNumeroFolio = 1; // u.UltimoNumeroRenglon = 1; // u.UltimoNumeroTransporte = 1; // context.UltimoDiario.Add(u); // context.SaveChanges(); //} var newDbConnString = "data source=DESKTOP-JSIT42C\\SQLEXPRESS; MultipleActiveResultSets=true ;initial catalog=" + tenant.BaseDeDatos + "; integrated security=SSPI"; //context.Database.Connection.ConnectionString; var connStringBuilder = new SqlConnectionStringBuilder(newDbConnString); connStringBuilder.InitialCatalog = tenant.BaseDeDatos; ConfigurationVentas config = new ConfigurationVentas(); DbMigrator migrator = new DbMigrator(config); VentasDBContext ctx = new VentasDBContext(newDbConnString); ctx.Database.Create(); Console.WriteLine("Past migrations:"); foreach (string s in migrator.GetDatabaseMigrations()) { Console.WriteLine(s); } Console.WriteLine("Local migrations:"); foreach (string s in migrator.GetLocalMigrations()) { Console.WriteLine(s); } Console.WriteLine("Pending migrations:"); foreach (string s in migrator.GetPendingMigrations()) { Console.WriteLine(s); } Console.WriteLine("Migrating..."); foreach (string s in migrator.GetLocalMigrations()) //GetPendingMigrations()) { //Act Console.WriteLine("Applying migration {0}", s); Action act = () => migrator.Update(s); //Assert //act.ShouldNotThrow(); } }
public IEnumerable <string> GetLocalMigrations() { return(_migrator.GetLocalMigrations()); }
/// <summary> /// Gets all migrations that are defined in the configured migrations assembly. /// </summary> /// <returns>List of migrations</returns> public IEnumerable <string> GetLocalMigrations() { AssertForReady(); return(_dbMigrator.GetLocalMigrations()); }
/// <summary> /// Gets all migrations that are defined in the current version /// </summary> /// <returns>Array of database migration names</returns> public string[] GetLocalMigrations() { return(_migrator.GetLocalMigrations().ToArray()); }