抽象类型引发视图错误:AppDbContext数据交互异常的修复
AppDbContext数据库交互异常修复
问题描述
AppDbContext类存在数据库数据无法正常交互的问题。
错误代码示例
public class AppDbContext : CentaureaContext { public DbSet<Concert> Concerts { get; set; } public DbSet<Ticket> Tickets { get; set; } public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Party>().ToTable("Parties"); modelBuilder.Entity<RegularConcert>().ToTable("RegularConcerts"); modelBuilder.Entity<ClassicalConcert>().ToTable("ClassicalConcerts"); base.OnModelCreating(modelBuilder); } }
修复方案
你在OnModelCreating中已经将Concert的三个具体派生类映射到独立数据表,但DbContext中仅声明了基类Concert的DbSet,这会导致EF Core无法正确处理分表的实体映射,进而引发数据库交互异常。
正确做法是移除基类DbSet<Concert>,添加每个具体派生类对应的DbSet:
public class AppDbContext : CentaureaContext { public DbSet<Party> Parties{get;set;} public DbSet<ClassicalConcert> ClassicalConcerts{get;set;} public DbSet<RegularConcert> RegularConcerts{get;set;} public DbSet<Ticket> Tickets { get; set; } public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Party>().ToTable("Parties"); modelBuilder.Entity<RegularConcert>().ToTable("RegularConcerts"); modelBuilder.Entity<ClassicalConcert>().ToTable("ClassicalConcerts"); base.OnModelCreating(modelBuilder); } }
内容的提问来源于stack exchange,提问作者koogel
相关产品推荐
相关产品推荐

