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



我有NET Core 3.1应用程序,其中我的[models,dbcontext,application]都在它们自己的程序集中。我正在尝试为应用程序发布迁移。我一直收到这个错误:

$ dotnet ef migrations add InitialCreate --project DataAccess 
MSBUILD:错误MSB1009:项目文件不存在。开关:DataAccess无法检索项目元数据。确保它是基于MSBuild。NET核心项目。如果您使用自定义BaseIntermediateOutputPath或MSBuildProjectExtensionPath值,使用--msbuildprojectextensionspath选项。

当前结构

*root
-App  (.NET Core 3.1)
-DataAccess  (.NET Standard 2.1)   (Contains the DBContext)
-Models     (.NET Standard 2.1)   (contains models)

我还尝试为迁移创建一个单独的程序集,并在App:中使用MigrationAssembly扩展

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

尝试过的结构

*root
-App
-Migrations (.NET Standard 2.1)
-DataAccess (.NET Standard 2.1)
-Models (.NET Standard 2.1)

我不明白该怎么做。我希望能够进行迁移,理想情况下我希望将它们保存在自己的程序集中。目前我根本做不到。

p。S
我还尝试将其添加到我的Appcsproj文件中:

<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>

经过几天又几天的谷歌搜索,上面@Ajay给出的答案终于对我有效了:

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

dotnet ef migrations add Mymigration --project "c:reposmyprojectData" 

您应该从您的主要启动项目(如c:\repos\myproject\Web(中执行此命令

这里的问题完全一样,从几个小时以来,很高兴知道不是唯一一个疯狂的人!

终于解决了:我正在使用EFCore。Package Manager控制台中的工具而不是dotnet Cli:

//添加迁移

Add-Migration *name* -Project *Library project* -StartupProject *StartUp/Web project*

//更新数据库

Update-Database -Project *Library project* -StartupProject *StartUp/Web project* -verbose

我会朝这个方向走。。。玩得高兴

首先将目录更改为项目目录,然后添加.csproj

$ dotnet ef migrations add InitialCreate --project DataAccess.csproj

我希望它能起作用!

我使用了完整的目录路径,它很有效。而且我们应该使用正确的项目参考。

例如:dotnet ef migrations add Initial --project D:NK-ProAPITaskAPI.DataAccessTaskAPI.DataAccess.csproj

相关内容

最新更新