查询ExternalSystem父实体时ExternalSystemRules导航属性为null的问题
你在查询ExternalSystem列表时,关联的ExternalSystemRules导航属性始终为null,已尝试使用EF Core的自动预加载(AutoInclude)但未生效,核心问题出在以下几个地方:
1. DbContext未加载实体配置类
你的MyDatabaseContext没有重写OnModelCreating方法,EF Core无法发现并应用你定义的ExternalSystemConfiguration和ExternalSystemRulesConfiguration配置类,导致包括AutoInclude在内的所有配置都未生效。
修复方法:在MyDatabaseContext中添加OnModelCreating方法,加载程序集中的所有配置类:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // 自动加载当前程序集中所有实现IEntityTypeConfiguration的配置类 modelBuilder.ApplyConfigurationsFromAssembly(typeof(MyDatabaseContext).Assembly); }
2. 仅配置了反向导航的自动预加载
你只在ExternalSystemRulesConfiguration中对ExternalSystem导航属性设置了AutoInclude(),这只会在查询ExternalSystemRules时自动加载关联的ExternalSystem。而你需要的是查询ExternalSystem时自动加载ExternalSystemRules,需要在ExternalSystemConfiguration中对该导航属性配置AutoInclude:
修改ExternalSystemConfiguration:
public class ExternalSystemConfiguration : IEntityTypeConfiguration<ExternalSystem> { public void Configure(EntityTypeBuilder<ExternalSystem> builder) { builder.ToTable("ExternalSystem"); builder.Property(e=>e.Id).HasColumnName("ExternalSystemId"); builder.HasKey(e=>e.Id); // 添加这行,配置查询ExternalSystem时自动加载ExternalSystemRules builder.Navigation(e => e.ExternalSystemRules).AutoInclude(); } }
3. DbSet命名不规范(潜在问题)
你的MyDatabaseContext中ExternalSystemRules对应的DbSet命名为ExternalSystemRule(单数),虽然不直接导致自动预加载失效,但不符合EF Core的命名惯例,可能引发其他潜在问题,建议改为复数:
public DbSet<ExternalSystemRules> ExternalSystemRules { get; set; }
内容的提问来源于stack exchange,提问作者I Love Stackoverflow

