using DbUp;
using DbUp.Engine;
using Microsoft.Extensions.Configuration;
namespace JdeScoping.Database;
///
/// Handles database migrations using DbUp.
///
public class DatabaseMigrator : IDatabaseMigrator
{
private readonly string _connectionString;
///
/// Initializes a new instance of the DatabaseMigrator class.
///
/// Application configuration containing connection strings.
/// Thrown when SqlServer connection string is not configured.
public DatabaseMigrator(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("SqlServer")
?? throw new InvalidOperationException("SqlServer connection string not configured");
}
///
public DatabaseUpgradeResult Migrate()
{
EnsureDatabase.For.SqlDatabase(_connectionString);
var upgrader = DeployChanges.To
.SqlDatabase(_connectionString)
.WithScriptsEmbeddedInAssembly(typeof(DatabaseMigrator).Assembly)
.WithTransaction()
.LogToConsole()
.Build();
return upgrader.PerformUpgrade();
}
}