EF Core同一模型多DbSet取数问题:Num5Info调用失败求助
排查 Num5Info DbSet 无法取数的原因
以下是可能导致问题的核心原因及对应解决方法:
1. 实体与表的映射配置错误
由于你使用同一个 Info 实体类型创建了两个 DbSet(Info 和 Num5Info),EF Core 默认会将两者都映射到 Info 表,而非 Num5Info 表。EF Core 是根据实体类型而非 DbSet 名称来确定表映射的,因此必须显式配置 Num5Info 的表映射关系。
解决方法:
创建空派生类区分实体类型,再在 DbContext 中配置各自的表映射:
// 新增派生类 public class Num5Info : Info { } // 更新 DbContext 中的 DbSet 定义 public DbSet<Info> Info { get; set; } public DbSet<Num5Info> Num5Info { get; set; } // 在 OnModelCreating 方法中配置表映射 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Info>().ToTable("Info"); modelBuilder.Entity<Num5Info>().ToTable("Num5Info"); }
2. 缺少显式表名配置
如果未在 OnModelCreating 中指定 Num5Info 对应的表名,EF Core 会默认使用实体类型对应的表名(即 Info),导致查询时找不到 dbo.Num5Info 表。
3. 表结构与实体模型不匹配
确认 dbo.Num5Info 表的结构(列名、数据类型、主键)与 Info 实体完全一致。例如,若表中缺少 Name 列,代码中 i.Name!.Equals(name) 的查询会抛出列不存在的异常。
4. 查看具体错误信息
调用失败时的异常提示能直接定位问题:
- 若提示「Invalid object name 'dbo.Num5Info'」:说明映射配置未生效,EF Core 找不到目标表。
- 若提示列不存在:说明表结构与实体模型不匹配。
次要代码修正(不影响取数但需优化)
失败代码中的 Problem 消息仍使用了 MvcCarContext.Info,应改为 MvcCarContext.Num5Info:
Problem("Entity set 'MvcCarContext.Num5Info' is null.")
内容的提问来源于stack exchange,提问作者demin cheng
相关产品推荐
相关产品推荐

