.NET 4.8下ASP.NET Web API项目EF Core不识别实体数据注解
问题:ASP.NET Web API项目中EF Core 3.1忽略实体数据注解
背景
基于.NET 4.8的ASP.NET项目,从EF 6迁移到EF Core 3.1(采用“伪代码优先”方式:删除.edmx文件并修改DbContext)。数据库架构已锁定,仅需保证现有功能正常,不允许适配数据库变更,且重新生成DbContext/实体会破坏大量代码,因此不可行。
异常现象
已有Web项目、多个控制台项目及Windows服务运行正常,但唯一的ASP.NET Web API项目持续出现以下问题:
- 初始化DbContext时,提示未定义主键,需手动在
OnModelCreating中添加HasKey配置才能解决(仅针对不遵循约定的主键); - 执行查询时,EF Core忽略实体类上的
[Table]注解,使用DbSet属性名作为表名,导致报错。
示例代码与错误
执行查询代码:
using (var db = new EFContext()) { var statuses = db.FaxStatuses.FirstOrDefault(); }
抛出错误:
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'FaxStatuses'
通过SQL Server Profiler观察到:
- 正确应生成的SQL:
SELECT TOP 1 * FROM Global.FaxStatus
- 实际生成的SQL:
SELECT TOP 1 * FROM Global.FaxStatuses
已做排查
- 确认该Web API项目中所有EF Core相关库(基础库、SqlServer、Relational、Proxies、Abstractions)的版本与正常项目完全一致;
- 检查启动代码,未发现会干扰EF Core配置的内容;
- DbContext和实体类均位于所有项目共享的类库中,其他项目使用正常。
补充信息
DbContext中FaxStatus的DbSet声明:
public DbSet<FaxStatus> FaxStatuses { get; set; }
OnModelCreating中的配置:
modelBuilder.Entity<FaxStatus>();
疑问
为何唯独这个Web API项目会忽略实体类上的数据注解?
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

