VS Code开发C# Web API时Entity Framework报CS0246错误如何解决
报错原因
- 拼写错误:代码中存在两处EF核心类型名拼写错误
- 声明数据集用的
Dbset<>拼写错误,正确类型名为DbSet<>,第二个字母S需要大写 - 构造函数入参用的
DbContextOption<>拼写错误,正确类型名为DbContextOptions<>,末尾缺少字母s
- 声明数据集用的
- NuGet包版本不兼容:项目引用了两个已废弃、版本不匹配的EF相关包
Microsoft.EntityFrameworkCore.SqlServer.Design v1.1.6是EF Core 1.x时代的遗留包,和当前使用的EF Core 5.0.9、.NET 5目标框架不兼容Microsoft.EntityFrameworkCore.Tools.DotNet v2.0.3为废弃包,EF Core 3.0之后相关功能已整合到Microsoft.EntityFrameworkCore.Tools包中,多余引用会引发版本冲突
解决步骤
1. 修正代码拼写
将Conexion类的代码替换为以下内容:
using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Mvc; using System.Data; namespace web_api_db.Models{ public class Conexion : DbContext{ public Conexion(DbContextOptions<Conexion> options) : base (options){} public DbSet<Medicine> Medicine {get;set;} } }
2. 清理csproj配置
删除项目csproj文件中两个过时包的引用行:
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" /><PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
修改后csproj的包引用节点如下:
<ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.9" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.9" /> <PackageReference Include="Microsoft.EntityFrameworkCore.tools" Version="5.0.9"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" /> <PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.8" /> </ItemGroup>
3. 重新编译项目
依次执行以下命令:
- 还原NuGet依赖:
dotnet restore - 编译项目:
dotnet build
执行完成后报错即可消失。
内容的提问来源于stack exchange,提问作者Moya
相关产品推荐
相关产品推荐

