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)
经过日复一日的谷歌搜索后,上面@Ajay给出的答案终于对我有用了:
在 --project 参数中插入迁移程序集的完整路径,如下所示:
dotnet ef migrations add Mymigration --project "c:\repos\myproject\Data"
Run Code Online (Sandbox Code Playgroud)
...您应该从主启动项目(例如 c:\repos\myproject\Web)执行此命令
在这里完全相同的问题,从几个小时开始,很高兴知道并不是唯一一个对此感到疯狂的人!
终于解决了:我在包管理器控制台中使用 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)
我会朝这个方向...玩得开心!
| 归档时间: |
|
| 查看次数: |
6142 次 |
| 最近记录: |