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

升级到C#10/.NET6后Context.cs的OnModelCreatingPartial出现CS8795编译错误

升级到.NET 6/C# 10后CS8795错误(OnModelCreatingPartial必须实现)解决方案

错误根因

CS8795错误本质是C# 9及更高版本对分部方法的规则调整:当分部方法带有public/protected/internal等显式访问修饰符、或是带有返回值/输出参数时,必须在同一项目内存在对应的实现部分,否则编译器会抛出该错误。
EF Core旧版本脚手架生成的OnModelCreatingPartial方法声明常带有protected修饰符,在C# 9之前不会触发校验,升级到C# 10(随.NET 6默认启用)后就会触发编译错误。


解决方案

  • 方案1:无需自定义模型配置时直接移除访问修饰符
    找到报错行的OnModelCreatingPartial声明,删掉前面的protected/public等访问修饰符即可。无显式访问修饰符的无返回值分部方法默认是私有,即使没有实现,编译器会自动忽略相关调用,不会抛出错误。
    修改前的报错代码示例:

    protected partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    

    修改后的正确代码:

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    

    如果该代码是EF Core脚手架自动生成的,可修改脚手架的T4模板,调整生成规则避免每次重新生成后重复修改。

  • 方案2:需要自定义模型配置时补充实现
    在同一项目下新建一个分部类文件(命名可类似XXXXDbContext.Custom.cs,避免被脚手架覆盖),在同命名空间下实现该分部方法即可:

    namespace 你的XXXXDbContext所在命名空间
    {
        public partial class XXXXDbContext : DbContext
        {
            partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
            {
                // 此处编写自定义的模型配置逻辑
            }
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:02