将参数传递给EF Core的IDesignTimeDbContextFactory

时间:2018-05-27 15:03:26

标签: .net-core entity-framework-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);
}

3 个答案:

答案 0 :(得分:3)

.NET 5在得到答案的几周后发布。因此,这有可能改变。

立即回答

.NET 5和关联的EF Core 5+ NuGets支持此功能。在包管理器中,您可以输入:

Add-Migration YourMigrationName -Args "Space Separated Args"
Update-Database -Args "Space Separated Args"

例如,我使用这个:

Update-Database -Args MyConnName

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

请注意,我说过.NET Core5。从现在起数周内将发布完整版本。因此,在几周内这个答案可能很简单。但在此之前,您可能需要安装预览版(和NuGet PreReleases)

回答之前

询问此问题时,缺少选项,尽管有些选项,例如将dotnet ef commandsAppArgs一起使用,作为discussed here。但是这些已更改,并且现在也可以从PM控制台访问,如上面“现在”的答案中所述。

答案 1 :(得分:1)

我最近有一个类似的问题,试图获取一个Asp.Net Core应用程序以读取连接字符串。事实证明,您不需要IDesignTimeDbContextFactory。相反,只需确保您的上下文具有无参数构造函数,并在启动时使用类似这样的内容:

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

这应该解析为您配置的任何连接字符串。如果您确实想同时使用两个单独的连接(我知道您不想要),则可以通过在此时注册多个DbContext来实现。例如:

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

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

答案 2 :(得分:0)

您也可以像这样设置变量:

$env:SqlConnectionString="Server=tcp:mySqlServerStuffxxx"
Add-Migration InitialCreate
Update-Database

来源:

https://dev.to/azure/using-entity-framework-with-azure-functions-50aa#adding-an-entity-framework-migration

不过它不适用于 ConnectionStrings.DefaultConnection。它会给出以下错误:

<块引用>

在此对象上找不到属性“DefaultConnection”。 验证该属性是否存在并且可以设置。