将参数传递给 EF Core 的 IDesignTimeDbContextFactory

Vin*_*nce 9 entity-framework-core .net-core

我们如何将参数传递给 dotnet ef 数据库更新?

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

我试过了

dotnet ef 数据库更新“接受”

dotnet ef 数据库更新 接受

但它没有用..

或者我如何放置一个开关以从我的配置中获取不同的 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);
}
Run Code Online (Sandbox Code Playgroud)

Sua*_*ere 5

.NET 5 将在此回答发布后的几周内发布。所以这是可以改变的。

现在回答

.NET 5 和相关的 EF Core 5+ NuGets 支持这一点。在包管理器中,您可以键入:

Add-Migration YourMigrationName -Args "Space Separated Args"
Update-Database -Args "Space Separated Args"
Run Code Online (Sandbox Code Playgroud)

例如,我使用这个:

Update-Database -Args MyConnName
Run Code Online (Sandbox Code Playgroud)

在我的 Startup 项目中,我有一个包含该连接字符串键的配置文件(或 appsettings.json),我将其拉入。

请注意,我说的是 .NET Core 5。这将在几周后发布完整版本。所以几周后,这个答案可能很简单。但在那之前,您可能需要安装预览版(和 NuGet PreReleases)

回答 之前

当问到这个问题时,缺少选项,尽管有选项,比如使用dotnet ef commandswith AppArgs,如这里讨论的。但是这些已经改变,现在也可以从 PM 控制台访问,如上面的“现在”答案中所述。