.net-core – 将参数传递给EF Core的IDesignTimeDbContextFactory

我们怎样才能将参数传递给dotnet ef数据库更新?

我希望能够使用参数更新不同的数据库.

我试过了

dotnet ef数据库更新“接受”

dotnet ef databse update接受

但它没有用..

或者我如何设置一个开关来从我的配置中获取不同的conenctionString?

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);
}

最佳答案 我最近有一个类似的问题试图让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")));
点赞