DBContext在不同程序集中时如何创建迁移

Ber*_*ian 3 msbuild entity-framework-core entity-framework-migrations

我的NET Core 3.1应用程序[models,dbcontext,application]都在自己的程序集中。我正在尝试为应用程序发出迁移。我不断收到此错误:

$ dotnet ef migrations add InitialCreate --project DataAccess 
Run Code Online (Sandbox Code Playgroud)

MSBUILD:错误MSB1009:项目文件不存在。开关:DataAccess 无法检索项目元数据。确保它是基于 MSBuild 的 .NET Core 项目。如果使用自定义 BaseIntermediateOutputPath 或 MSBuildProjectExtensionsPath 值,请使用 --msbuildprojectextensionspath 选项。

目前的结构

*root
  -App  (.NET Core 3.1)
  -DataAccess  (.NET Standard 2.1)   (Contains the DBContext)
  -Models     (.NET Standard 2.1)   (contains models)
Run Code Online (Sandbox Code Playgroud)

我还尝试为迁移创建一个单独的程序集,并在我的App

services.AddDbContext<[some DBContext]>(x => x.UseSqlServer([some string],x=>x.MigrationsAssembly("Migrations")));
Run Code Online (Sandbox Code Playgroud)

尝试过的结构

 *root
      -App
      -Migrations (.NET Standard 2.1)
      -DataAccess (.NET Standard 2.1)
      -Models (.NET Standard 2.1)
Run Code Online (Sandbox Code Playgroud)

我不明白应该如何完成此操作。我希望能够进行迁移,理想情况下我希望将它们保留在自己的程序集中。目前我根本无法执行它们。

PS
我也尝试将其添加到我的Appcsproj 文件中:

<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
Run Code Online (Sandbox Code Playgroud)

Dvd*_*nco 7

经过日复一日的谷歌搜索后,上面@Ajay给出的答案终于对我有用了:

在 --project 参数中插入迁移程序集的完整路径,如下所示:

dotnet ef migrations add Mymigration --project "c:\repos\myproject\Data" 
Run Code Online (Sandbox Code Playgroud)

...您应该从主启动项目(例如 c:\repos\myproject\Web)执行此命令


wan*_*ani 5

在这里完全相同的问题,从几个小时开始,很高兴知道并不是唯一一个对此感到疯狂的人!

终于解决了:我在包管理器控制台中使用 EFCore.Tools 而不是 dotnet Cli:

//添加迁移

Add-Migration *name* -Project *Library project* -StartupProject *StartUp/Web project*
Run Code Online (Sandbox Code Playgroud)

//更新数据库

Update-Database -Project *Library project* -StartupProject *StartUp/Web project* -verbose
Run Code Online (Sandbox Code Playgroud)

我会朝这个方向...玩得开心!