Npgsql EF Core Provider v2.0:无法从现有数据库对核心模型进行逆向工程
Npgsql EF Core Provider v2.0: Can't reverse-engineer a core model from existing database
开发环境:
- macOS Sierra 版本 10.12.6
- Visual Studio Mac 版本 7.2.2
的社区
- 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设置如下:
- 启用:提出解决方案时自动恢复包。
- 已启用:打开解决方案时检查包更新。
- 来源:https://api.nuget.org/v3/index.json
一些注意事项:
- 没有 Npgsql.EntityFrameworkCore.PostgreSQL.Design 因为该包已合并到 2.0.0 版本中的主包中。您应该删除该依赖项。
- Microsoft.VisualStudio.Web.CodeGeneration.Tools 与 Entity Framework 无关 - 它是 ASP.NET 与网络相关的命令。我不确定你为什么会收到错误,尝试暂时删除该依赖项以查看会发生什么。
- 命令行脚手架可通过 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>
开发环境:
- macOS Sierra 版本 10.12.6
- Visual Studio Mac 版本 7.2.2 的社区
- 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设置如下:
- 启用:提出解决方案时自动恢复包。
- 已启用:打开解决方案时检查包更新。
- 来源:https://api.nuget.org/v3/index.json
一些注意事项:
- 没有 Npgsql.EntityFrameworkCore.PostgreSQL.Design 因为该包已合并到 2.0.0 版本中的主包中。您应该删除该依赖项。
- Microsoft.VisualStudio.Web.CodeGeneration.Tools 与 Entity Framework 无关 - 它是 ASP.NET 与网络相关的命令。我不确定你为什么会收到错误,尝试暂时删除该依赖项以查看会发生什么。
- 命令行脚手架可通过 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>