我们如何将参数传递给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);
}
答案 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 commands
与AppArgs
一起使用,作为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
来源:
不过它不适用于 ConnectionStrings.DefaultConnection
。它会给出以下错误:
在此对象上找不到属性“DefaultConnection”。 验证该属性是否存在并且可以设置。