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

是否可在Scaffolding上下文时自动开启导航AutoInclude?

解决EF Core Scaffold导航属性自动包含不被覆盖的方案

方案1:用分部类扩展上下文配置

Scaffold生成的DbContext是partial类,我们可以单独新建一个分部类文件来补充配置,不会被后续Scaffold操作覆盖。

比如新建YourDbContext.Extensions.cs文件,写入以下代码:

public partial class YourDbContext
{
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        // 为Contract的Cards导航配置自动包含
        modelBuilder.Entity<Contract>()
            .Navigation(x => x.Cards)
            .AutoInclude();
        
        // 后续新增实体的导航配置也可以加在这里
    }
}

EF Core默认会在自动生成的OnModelCreating方法里调用OnModelCreatingPartial分部方法,我们实现这个方法来添加自定义配置,完全不会被Scaffold覆盖。

方案2:全局批量配置所有导航自动包含

如果需要所有实体的导航属性都自动包含,不用逐个配置,可以在分部类里批量设置:

public partial class YourDbContext
{
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        foreach (var entityType in modelBuilder.Model.GetEntityTypes())
        {
            foreach (var navigation in entityType.GetNavigations())
            {
                navigation.SetIsAutoInclude(true);
            }
        }
    }
}

这样不管后续新增多少表,所有导航属性都会自动开启AutoInclude。

方案3:自定义Scaffold模板(适合团队统一规范)

如果想让Scaffold自动生成AutoInclude配置,可以修改EF Core的Scaffold模板:

  • 找到EF Core的Scaffold模板文件(通常在NuGet包的templates目录下,比如EntityType.cshtml或DbContext.cshtml)
  • 修改模板逻辑,让它在生成实体配置时自动添加Navigation(x => x.NavProp).AutoInclude()的代码
  • 把修改后的模板放到项目的Templates目录下,后续Scaffold就会用自定义模板生成代码

这个方法适合需要统一团队开发规范的场景,一劳永逸解决自动生成的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:15:43