升级到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
相关产品推荐
相关产品推荐

