我有一个API项目,它是Core 2.0应用程序的正常启动 ASP.NET。
此解决方案还具有包含 DbContext 的附属程序集。
在附属程序集目录中打开命令提示符并尝试运行如下 CLI 命令:
dotnet ef migrations add UserAccountFields
这导致:
尚未为此 DbContext 配置任何数据库提供程序。一个 提供程序可以通过重写 DbContext.OnProvisioning 来配置。 方法或使用应用程序服务提供程序上的 AddDbContext。
这是有道理的,因为没有任何有效的配置可供读取。 CLI 似乎不允许在命令本身中指定提供程序或连接字符串。 但是,您可以在从现有数据库搭建上下文的基架时,但我们首先使用代码,因此这是不可能的。
如果我切换到根应用程序项目的目录并尝试:
dotnet ef migrations add UserAccountFields -c ErsSecurityContext
我收到错误:
找不到匹配命令"dotnet-ef"的可执行文件
这也是有道理的,因为根应用程序不包含对 EF NuGet 的引用,我们不希望它包含。
我们的连接字符串也存储在用户机密中,这使情况进一步复杂化。
如何通过重写 OnConfigure 方法使此方案正常工作,而不会导致代码中的连接字符串分散?
我被难住了。我们的架构很好,但这是一个完整的表演障碍,我不知道如何使用任何不错的 CLI 东西来搭建迁移的脚手架。
所以在阅读了Mark G提供的链接之后。
https://github.com/aspnet/EntityFrameworkCore/issues/10806
我现在可以使用对命令的这个简单更改来创建迁移。 导航到包含上下文和迁移的项目的目录,在此处打开命令提示符并使用:
dotnet ef migrations add <migration-name> -c <context-name> --startup-project <relative-path-to-startup-csproj-file>
这也适用于其他命令,例如:
dotnet ef database update --startup-project <relative-path-to-startup-csproj-file>
dotnet ef migrations remove --startup-project <relative-path-to-startup-csproj-file>