我使用Visual Studio for Mac,创建了一个.NET Core Web API项目。 csproj文件如下:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.9-dmr" />
<PackageReference Include="MySql.Data.EntityFrameworkCore.Design" Version="8.0.9-dmr" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
</Project>
当我执行“dotnet ef dbcontext scaffold”命令从MySQL生成脚手架时,使用以下命令:
dotnet ef dbcontext scaffold "server=[server];port=3306;user=[user];password=[password];database=[dbname]" MySql.Data.EntityFrameworkCore -o Models -c [contextname] -f -v
该命令返回的错误如下:
Could not load type 'Microsoft.EntityFrameworkCore.Infrastructure.DesignTimeProviderServicesAttribute' from assembly 'Microsoft.EntityFrameworkCore, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
我检查了Microsoft.EntityFrameworkCore包,确实没有Infrastructure命名空间。但在网上搜索后,我发现其他人可以成功使用这些设置来生成代码。
我做错了什么吗?
我该如何正确地生成代码?
谢谢大家。
Microsoft.AspNetCore.All
。 - AhmarDesignTimeProviderServicesAttribute
在1.x版本中位于Infrastructure命名空间中。它已经移动到2.0版本中的Design命名空间。由于这是主要版本更改,可能会有各种破坏性的变化。虽然MySQL包同时针对EF Core版本(1.1.4和2.0.0),但在所有情况下正确工作的可能性非常小。 - Smit