You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

抽象类型引发视图错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:25:19