添加Entity Framework至.NET Core项目遇dotnet restore异常求助
问题诊断与解决方案
首先明确一点:你选错了Entity Framework的版本,这是所有问题的核心!
错误原因分析
- 你添加的
EntityFramework包是EF6,它是专门为传统.NET Framework设计的,完全不支持.NET Core。 - 为什么
dotnet restore卡住无提示:.NET Core的包还原工具在处理这种不兼容的.NET Framework专属包时,会陷入静默等待或者后台无限尝试解析依赖,不会给出明确的失败提示,只会停在"Restoring packages..."这一行。 - 为什么
using System.Data.Entity;报错:这个命名空间属于EF6,而你的.NET Core环境中根本不存在对应的程序集,IDE自然找不到这个命名空间。 - 移除EF6后恢复正常:因为项目回到了纯.NET Core的依赖体系,没有了不兼容的包,所以还原和运行都能正常执行。
正确的解决方案
你需要使用Entity Framework Core(EF Core),这是微软为.NET Core/.NET 5+打造的轻量、跨平台版本的EF。具体步骤如下:
- 打开你的
DBCreation.csproj,删除原来的EF6包引用:<!-- 删掉这一段 --> <ItemGroup> <PackageReference Include="EntityFramework" Version="6.2.0"/> </ItemGroup> - 添加适配你.NET Core版本的EF Core包引用:
由于你的.NET Core Runtime版本是2.0.7,所以要选择EF Core 2.x系列的版本(比如2.0.7),确保版本匹配:<ItemGroup> <!-- 核心EF Core包 --> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.7" /> <!-- 如果你的项目要连接SQL Server,添加这个包;其他数据库比如MySQL/PostgreSQL请对应替换 --> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.7" /> </ItemGroup> - 执行
dotnet restore,这次应该会正常完成并显示耗时。 - 调整代码中的命名空间引用:将
using System.Data.Entity;替换为EF Core的命名空间:using Microsoft.EntityFrameworkCore; - 之后执行
dotnet build和dotnet run就可以正常构建运行了。
额外注意事项
- 版本匹配很重要:你的SDK是2.1.105,对应.NET Core 2.0 Runtime,所以EF Core的版本必须选2.x系列,不要选3.x或更高版本,否则会出现版本不兼容的错误。
- 如果需要使用EF的迁移功能,还需要添加
Microsoft.EntityFrameworkCore.Tools包(同样选2.0.7版本)。
内容的提问来源于stack exchange,提问作者Denis Stepanov
相关产品推荐
相关产品推荐

