public EfMigrator(string assemblyPath, string qualifiedDbConfigName, string appConfigPath, string connectionString, string connectionProvider, ILogger logger) { _logger = logger; appConfigPath = Path.GetFullPath(appConfigPath); if (!File.Exists(appConfigPath)) { throw new EfMigrationException($"The {nameof(appConfigPath)} '{appConfigPath}' must exist."); } var domainSetup = AppDomain.CurrentDomain.SetupInformation; domainSetup.ConfigurationFile = appConfigPath; _logger.Debug($"Prepared AppDomain setup using {appConfigPath} as the appconfig."); var domainName = $"EfMigrator:{Guid.NewGuid()}"; _domain = AppDomain.CreateDomain(domainName, null, domainSetup); _logger.Debug($"Created new AppDomain named {domainName}."); var type = typeof(EfMigratorBackend); var fullPath = Assembly.GetAssembly(typeof(EfMigratorBackend)).Location; //var domain = AppDomain.CurrentDomain.GetAssemblies() // .Where(x => !x.IsDynamic) // .Where(x => !x.GlobalAssemblyCache) // .Select(x => Path.GetDirectoryName(x.Location)) // .Distinct(); //var domains = string.Join(", ", domain); //logger.Debug($"Loading assemblies into appDomain: {domains}."); Debug.Assert(fullPath != null, "fullPath != null"); var migrator = (EfMigratorBackend)_domain.CreateInstanceFromAndUnwrap(fullPath, type.FullName); _logger.Debug("Created new instance."); migrator.Initialize(assemblyPath, qualifiedDbConfigName, connectionString, connectionProvider); _logger.Debug($"Initialized new {nameof(EfMigratorBackend)} within {domainName}."); CurrentMigration = migrator.GetCurrentMigration() ?? InitialDatabase; var currentMigrationStr = CurrentMigration == InitialDatabase ? "$InitialDatabase" : CurrentMigration; _logger.Information($"Current Migration is {currentMigrationStr}."); _migratorBackend = migrator; }
public EfMigrator(string assemblyPath, string qualifiedDbConfigName, string appConfigPath, string connectionString, string connectionProvider, ILogger logger) { _logger = logger; appConfigPath = Path.GetFullPath(appConfigPath); if (!File.Exists(appConfigPath)) { throw new EfMigrationException($"The {nameof(appConfigPath)} '{appConfigPath}' must exist."); } var domainSetup = AppDomain.CurrentDomain.SetupInformation; domainSetup.ConfigurationFile = appConfigPath; _logger.Debug($"Prepared AppDomain setup using {appConfigPath} as the appconfig."); var domainName = $"EfMigrator:{Guid.NewGuid()}"; _domain = AppDomain.CreateDomain(domainName, null, domainSetup); _logger.Debug($"Created new AppDomain named {domainName}."); var type = typeof(EfMigratorBackend); var fullPath = Assembly.GetAssembly(typeof(EfMigratorBackend)).Location; //var domain = AppDomain.CurrentDomain.GetAssemblies() // .Where(x => !x.IsDynamic) // .Where(x => !x.GlobalAssemblyCache) // .Select(x => Path.GetDirectoryName(x.Location)) // .Distinct(); //var domains = string.Join(", ", domain); //logger.Debug($"Loading assemblies into appDomain: {domains}."); Debug.Assert(fullPath != null, "fullPath != null"); var migrator = (EfMigratorBackend) _domain.CreateInstanceFromAndUnwrap(fullPath, type.FullName); _logger.Debug("Created new instance."); migrator.Initialize(assemblyPath, qualifiedDbConfigName, connectionString, connectionProvider); _logger.Debug($"Initialized new {nameof(EfMigratorBackend)} within {domainName}."); CurrentMigration = migrator.GetCurrentMigration() ?? InitialDatabase; var currentMigrationStr = CurrentMigration == InitialDatabase ? "$InitialDatabase" : CurrentMigration; _logger.Information($"Current Migration is {currentMigrationStr}."); _migratorBackend = migrator; }
/// <summary> /// Entity Framework Migration /// </summary> /// <param name="assemblyPath">full path to the assembly</param> /// <param name="qualifiedDbConfigName">Name of the DbConfiguration class to use for the migrations</param> /// <param name="appConfigPath">App.Config or Web.config file path</param> /// <param name="connectionString">Connectionsting name of actually connection string</param> /// <param name="connectionProvider">Name of the connection string provider</param> /// <param name="logger">Logger to write items to the console</param> /// <param name="allowDataLossOnMigrations">Determines whether to allow dataloss during the migration</param> public EfMigrator(string assemblyPath, string qualifiedDbConfigName, string appConfigPath, string connectionString, string connectionProvider, ILogger logger, bool allowDataLossOnMigrations) { _logger = logger; _logger.Information($"Connection string being used is: {connectionString}"); appConfigPath = Path.GetFullPath(appConfigPath); if (!File.Exists(appConfigPath)) { throw new EfMigrationException($"The {nameof(appConfigPath)} '{appConfigPath}' must exist."); } var domainSetup = AppDomain.CurrentDomain.SetupInformation; domainSetup.ConfigurationFile = appConfigPath; _logger.Debug($"Prepared AppDomain setup using {appConfigPath} as the appconfig."); var domainName = $"EfMigrator:{Guid.NewGuid()}"; _domain = AppDomain.CreateDomain(domainName, null, domainSetup); _logger.Debug($"Created new AppDomain named {domainName}."); var type = typeof(EfMigratorBackend); var fullPath = Assembly.GetAssembly(typeof(EfMigratorBackend)).Location; Debug.Assert(fullPath != null, "fullPath != null"); var migrator = (EfMigratorBackend)_domain.CreateInstanceFromAndUnwrap(fullPath, type.FullName); _logger.Debug("Created new instance."); migrator.Initialize(assemblyPath, qualifiedDbConfigName, connectionString, connectionProvider, appConfigPath); _logger.Debug($"Initialized new {nameof(EfMigratorBackend)} within {domainName}."); CurrentMigration = migrator.GetCurrentMigration() ?? InitialDatabase; var currentMigrationStr = CurrentMigration == InitialDatabase ? "$InitialDatabase" : CurrentMigration; _logger.Information($"Current Migration is {currentMigrationStr}."); migrator.SetAllowDataLossOnMigrations(allowDataLossOnMigrations); _migratorBackend = migrator; }
public EfMigrator(IEfMigratorBackend migratorBackend, ILogger logger) { _logger = logger; _migratorBackend = migratorBackend; }
/// <summary> /// Entity Framework Migration /// </summary> /// <param name="migratorBackend">Ef Migrator Backend commnication used in AppDomain</param> /// <param name="logger">Logger to write items to the console</param> public EfMigrator(IEfMigratorBackend migratorBackend, ILogger logger) { _logger = logger; _migratorBackend = migratorBackend; }