无法检索项目元数据确保它是基于msbuild的.net核心项目

b09cbbtk  于 2021-06-20  发布在  Mysql
关注(0)|答案(7)|浏览(413)

我在网上做了很多研究,但没有找到合适的解决办法。我尝试使用entity framework core和mysql,使用database first scaffold方法Map表模型,但在应用命令时总是收到此错误

Unable to retrieve project metadata. Ensure it's an MSBuild-based .NET Core project. If you're using custom BaseIntermediateOutputPath or MSBuildProjectExtensionsPath values, Use the --msbuildprojectextensionspath option.

这是我用来构建数据库模型的命令:

Scaffold-DbContext "server=localhost;port=3306;user=root;password=1234;database=world" "Pomelo.EntityFrameworkCore.MySql" -OutputDir .\Models -f

这是我的.net核心项目设置:

<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.1" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
  </ItemGroup>
zzoitvuj

zzoitvuj1#

这是这个问题的最终解决办法。
我与rider ide一起使用net core 3和pomelo.mysql构建web api
我有树层来定义我的应用程序:
test.domain-定义模型的类库test.infra.dataaccess-定义dbcontext test.service.restapi的类库-net core api项目,我在启动文件中定义appcontext。这样地:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContextPool<AerjDbContext>(
            options => options.UseMySql(Configuration.GetConnectionString("MySqlConnectionString"),
                mysqlOptions => mysqlOptions.ServerVersion(new Version(8,0,19), ServerType.MySql)
                    .EnableRetryOnFailure()
            ));
    }

这很正常,魔法发生在这里:
启动迁移:

dotnet ef migrations add InitialCreate --startup-project "../<Here the name of the project where startup file was configured>"

它将创建迁移
然后用sabe命令结构更新数据库;

dotnet ef database update --startup-project "../<Here the name of the project where startup file was configured>"
dgsult0t

dgsult0t2#

我在命令行中添加新的迁移时出错 dotnet ef migrations add NewMigration .
我的解决办法就是 --msbuildprojectextentionspath obj/local .

cx6n0qe3

cx6n0qe33#

对于ef核心3

我认为ef core 3的powershell命令已经消失了,所以我使用 dotnet ef dbcontext scaffold 使用此命令,如果要转换 Scaffold-DbContext 编写项目名称(参数)脚本 --project )需要有 .csproj 最后-它不能只是一个无扩展名。

w51jfk4q

w51jfk4q4#

将此参数添加到scaffold命令“--msbuildprojectextensionspath”的末尾。

djp7away

djp7away5#


我尝试了不同的解决方法来解决这个错误。在.csproj文件中做了以下更改。

通过编辑.csproj文件并删除import标记,然后在命令行中再次运行ef命令,解决了.NETcore的此问题。

dgjrabp2

dgjrabp26#

使用.netcore 2.2的ef迁移可以使用 migrations list :

dotnet ef migrations list --startup-project <app-startup-project-dir> --project <dal-project-dir> --context App.DAL.ApplicationDbContext
``` `--context` 必须指向要操作的dbcontext类的完全限定名。
e5nszbig

e5nszbig7#

在我的例子中,通过下载最新的dotnet-sdk-2.2.107-win-x64解决了这个错误
对于vs2017,然后通过cmd删除和更新数据库:

dotnet ef database drop --force --context <<dbcontext>> -s <<startup project directory>> -p <<project directory>>

dotnet ef database update --context <<dbcontext>> -s <<startup project directory>> -p <<project directory>>

相关问题