Npgsql EF Core Provider v2.0:无法从现有数据库对核心模型进行逆向工程

Npgsql EF Core Provider v2.0: Can't reverse-engineer a core model from existing database

开发环境:

参考http://www.npgsql.org/efcore/index.html

这是 .csproj 的内容:

    <Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <Folder Include="wwwroot\" />
        <Folder Include="SQL Scripts\" />
        <Folder Include="Models\" />
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.0.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="2.0.0-preview1" />
    </ItemGroup>
    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
    </ItemGroup>
</Project>

从 .csproj 内容中,记下“Npgsql.EntityFrameworkCore.PostgreSQL.Design”的版本。它是“2.0.0-preview1”。 “2.0.0”没有 nuget 包。

当我尝试发出对现有 postgreSQL 数据库进行逆向工程的命令时,我遇到以下消息:

Version for package `Microsoft.VisualStudio.Web.CodeGeneration.Tools` could not be resolved.

这是我用来对现有数据库进行逆向工程的经过清理的命令行:

dotnet ef dbcontext scaffold "Host=localhost;Database=mydatabase;Username=me;Password=mypwd" Npgsql.EntityFrameworkCore.PostgreSQL

Microsoft.VisualStudio.Web.CodeGeneration.Tools包的版本是2.0.0.

我的NuGet设置如下:

一些注意事项:

  1. 没有 Npgsql.EntityFrameworkCore.PostgreSQL.Design 因为该包已合并到 2.0.0 版本中的主包中。您应该删除该依赖项。
  2. Microsoft.VisualStudio.Web.CodeGeneration.Tools 与 Entity Framework 无关 - 它是 ASP.NET 与网络相关的命令。我不确定你为什么会收到错误,尝试暂时删除该依赖项以查看会发生什么。
  3. 命令行脚手架可通过 Microsoft.EntityFrameworkCore.Tools.DotNet 包获得,您似乎没有引用它。请参阅 this page 获取帮助和其他 EF Core 教程。

Shay,感谢您的快速回复。它帮助了很多。这是最终解决问题的.csproj 内容:

<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <Folder Include="wwwroot\" />
        <Folder Include="SQL Scripts\" />
        <Folder Include="Models\" />
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.0.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
    </ItemGroup>
    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    </ItemGroup>
</Project>