EF 核心 - 为没有连接字符串的数据库和另一个类库创建迁移

Posted

技术标签:

【中文标题】EF 核心 - 为没有连接字符串的数据库和另一个类库创建迁移【英文标题】:EF core - Creating a migration for a database without a connection string and in another class library 【发布时间】:2019-09-22 15:08:12 【问题描述】:

我想为与使用它的项目不同的类库中的第二个和后续数据库创建迁移。有皱纹。在用户登录并且我可以从目录数据库 (saas) 中获取它之前,我永远不会知道连接字符串。

对于目录数据库,我使用了来自this 站点的解决方案。很好 - 这个数据库在 appsettings.json 中有它的连接字符串,并且可以使用依赖注入。

使用相同的迁移,客户端数据库都将是相同的。我的问题是,我不知道如何从包管理器控制台创建这个初始迁移..

我确实尝试过运行这个:

dotnet ef migrations add INITIAL --context APIcontext -s ../Jobsledger.API

它给了我以下错误:

没有为此 DbContext 配置数据库提供程序。

正如我所料。

鉴于 CodingBlast 解决方案(上图)在不同的类库中运行迁移需要一个我没有的连接,并且需要在启动时注册数据库连接...

..鉴于此迁移将由每个要创建的用户数据库使用,我该如何创建它,当然还要使用它?

【问题讨论】:

【参考方案1】:

我确实回答了类似的问题here。

您可以在不使用连接字符串的情况下实例化 DbContext 的地方实现 IDesignTimeDbContextFactory

对于不同的库,可以使用--project 和--startup-project 参数。

这是我用来生成迁移脚本的示例:

dotnet ef migrations script --context MyDbContext --output migrations.sql --project "./MyApp.Data" --startup-project "./MyApp.Data"

【讨论】:

以上是关于EF 核心 - 为没有连接字符串的数据库和另一个类库创建迁移的主要内容,如果未能解决你的问题,请参考以下文章

EF-CodeFirst-数据库初始化

ASP.NET MVC: EF 没有创建数据库表

Azure Functions .NET Core 中的 EF Core 2.0 连接字符串

ef核心 - 如何将类映射的多个变体放到同一个表中

更改 EF 连接字符串给出 - 不支持关键字:'元数据'

带有 EF 6 的 MySql 连接器