无法加载类型“Microsoft.EntityFrameworkCore.Infrastructure.DesignTimeProviderServicesAttribute”。

6

我使用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 - Ahmar
什么?https://github.com/aspnet/EntityFrameworkCore/tree/dev/src/EFCore/Infrastructure - J. Doe
3
这是MySQL提供程序包中的问题。DesignTimeProviderServicesAttribute在1.x版本中位于Infrastructure命名空间中。它已经移动到2.0版本中的Design命名空间。由于这是主要版本更改,可能会有各种破坏性的变化。虽然MySQL包同时针对EF Core版本(1.1.4和2.0.0),但在所有情况下正确工作的可能性非常小。 - Smit
那么,@Smit,你有关于这个问题的任何解决方法吗? - Clark.Hsu
1
一个解决方法是针对1.1.4版本来搭建数据库,然后再切换到2.0.0版本。如果你能找到一种类型转发的方式,以便重新映射类型到新的命名空间,那么它可能会起作用,但我不确定如何在netcoreapps上实现它。 - Smit
1个回答

6

你应该从NuGet包中添加Microsoft.EntityFrameworkCore.SqlServer包,这对我有用。希望这对你也有用。


+1 对我也有用,谢谢。 问题出在我这边,因为我在安装了Microsoft.EntityFrameworkCore.SqlServer之后又安装了Microsoft.EntityFrameworkCore.SqlServer.Design,但没有注意到在安装第一个包时,后者从3.1降级到了1.6。 - wobuntu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接