Npgsql EF Core Provider v2.0:无法对现有数据库

时间:2017-11-07 21:47:53

标签: .net entity-framework core macos-sierra npgsql

开发环境:

  • macOS Sierra Version 10.12.6
  • 适用于Mac版本7.2.2的Visual Studio社区
  • postgreSQL版本9.4.5
  • Npgsql.EntityFrameworkCore.PostgreSQL版本2.0.0(Npgsql 3.2.5)

请参阅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设置如下:

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

一些注意事项:

  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教程。

答案 1 :(得分:0)

谢谢,谢谢快速反应。它帮助了很多。以下是最终解决问题的.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>