我如何使用一个简单的控制台消息保存生产数据库
#dotnet #database

作为.NET开发人员,当我将迁移到生产数据库的情况下,我在不更改数据库连接字符串的情况下进行了密切的调用。当我意识到自己的错误时,我感到非常沮丧,但是我很快就开始找到一种解决方案以防止它再次发生。

那是我想出一个想法来添加控制台消息,该消息在应用之前显示迁移详细信息。这个简单的补充使我有机会查看迁移细节并确保在进行任何更改之前与正确的数据库合作。

有了这个新的保障措施,我可以轻松地知道我的生产数据库免受意外更改的影响。它只是表明有时最简单的解决方案可能是最有效的。

public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        // ... Some code to generate dbContextBuilder
        var context = new ApplicationDbContext(dbContextBuilder.Options);

        // This is where magic happends
        var pendingMigrations = context.Database.GetPendingMigrations();
        Console.WriteLine("*********************************************\n");

        Console.WriteLine("This command is going to apply migrations with following details");

        Console.Write("ConnectionString: ");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine(connectionString);
        Console.ResetColor();

        Console.Write("Migrations:\n\t");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine(string.Join("\n\t", value: pendingMigrations.ToArray()));
        Console.ResetColor();
        Console.WriteLine();
        Console.WriteLine("*********************************************");

        Console.WriteLine("Do You confirm? (Y/N)");
        var userInput = (Console.ReadLine());

        if (userInput is "Y" or "y")
            return context;

        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Aborted!");
        Environment.Exit(1);
        return null;
    }
}