Передайте аргументы в IDesignTimeDbContextFactory из EF Core - PullRequest
0 голосов
/ 27 мая 2018

Как мы можем передать аргументы в обновление базы данных dotnet ef?

Я хочу иметь возможность обновлять другую базу данных с использованием аргументов.

Я пытался

обновление базы данных dotnet ef "Accept"

обновление базы данных dotnet ef Accept

но оно не работаетиз моей конфигурации?

public ProjectContext CreateDbContext(string[] args)
{
    IConfigurationRoot configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();

    // Find a way to get different connection string 
    var connectionString = configuration.GetConnectionString(args[0]);

    var builder = new DbContextOptionsBuilder<ProjectContext >();
    builder.UseSqlServer(connectionString);

    return new ProjectContext(builder.Options);
}

1 Ответ

0 голосов
/ 29 июня 2018

Недавно у меня была похожая проблема, когда я пытался заставить приложение Asp.Net Core прочитать строку подключения.Оказывается, вам не нужно IDesignTimeDbContextFactory.Вместо этого просто убедитесь, что ваш контекст имеет конструктор без параметров, и используйте что-то вроде этого при запуске:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));

Это должно разрешить любую настроенную вами строку подключения.Если вы хотите использовать два отдельных соединения одновременно (что, как я понимаю, вам не нужно), вы можете сделать это, зарегистрировав несколько DbContexts на этом этапе;например:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));

services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("OtherConnection")));
...