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

Blazor Server App中EF无法识别ArcadiaLogging实体的问题

解决方案:EF Core无法识别ArcadiaLogging实体(Blazor Server .NET 8)

核心问题排查与修复步骤

1. 移除错误的实体服务注册

你在Program.cs里注册了ArcadiaLogging为Scoped服务,这完全没必要——实体类不需要注册到DI容器,这会干扰EF Core的实体跟踪逻辑:

// 删掉这行代码
builder.Services.AddScoped<ArcadiaLogging>();

2. 确保DbSet正确初始化

你的ArcadiaContext中ArcadiaLoggings属性没有初始化,在.NET 8的非空引用类型规则下,EF Core可能无法正确识别这个实体。修改为:

// 初始化DbSet,避免EF忽略它
public DbSet<ArcadiaLogging> ArcadiaLoggings { get; set; } = null!;

或者保留可空(但推荐初始化):

public DbSet<ArcadiaLogging>? ArcadiaLoggings { get; set; }

3. 检查实体是否被EF加载

查看应用启动时控制台输出的Registered Entity Types:列表,如果没有ArcadiaLogging,说明EF没扫描到这个实体:

  • 若实体类和ArcadiaContext不在同一个程序集,在OnModelCreating中手动注册:
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Gc_ReferenceDrugsDb>()
            .HasKey(g => new { g.BNF_Drug_ID, g.DmdId, g.VmppId });
        // 手动添加实体
        modelBuilder.Entity<ArcadiaLogging>();
    }
    
  • 确认实体类没有被排除在项目之外(比如.csproj里的<Compile Remove>设置)。

4. 替换泛型Add为显式DbSet.Add

把_dbContext.Add(log);改为显式调用对应的DbSet,避免EF的实体类型推断出错:

// 替换之前的_dbContext.Add(log);
_dbContext.ArcadiaLoggings.Add(log);
await _dbContext.SaveChangesAsync();

5. 验证迁移与数据库同步

  • 删除旧的迁移文件,重新创建迁移:
    Add-Migration AddArcadiaLoggingEntity
    Update-Database
    
  • 确认数据库中ArcadiaLoggings表结构与模型匹配(比如Id字段是自增主键)。

6. Blazor Server生命周期检查

Blazor Server的Scoped服务是绑定到Circuit的,确保:

  • 你没有在组件中直接注入ArcadiaContext,而是通过服务层(比如你的日志服务)注入;
  • 重启应用清空Circuit缓存,避免旧的DbContext实例残留。

额外验证

执行这些步骤后,再次运行应用,检查控制台输出的实体列表是否包含ArcadiaLogging,然后测试日志写入逻辑。如果还是报错,检查_dbContext实例是否正确注入(避免手动创建DbContext)。

内容的提问来源于stack exchange,提问作者Bluetonic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:02:19