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

EF Core使用Include加载关联数据仅最后一条生效其余字段随机为null

问题根因

你的一对多关联关系配置错误,导致EF Core在批量加载数据时导航属性被覆盖。
CONF_Contract_Status(以及其他同类型的配置表)中的导航属性当前定义为单个Contract实体,会被EF Core识别为一对一关系,EF Core批量加载多条Contract数据时,同一个状态只会给最后一个匹配的Contract实体填充关联属性,之前的都会被置为null,这就是只有表格最后一行关联数据正常、单条查询的Detail页始终正常的原因。

解决方案

1. 修正配置表的导航属性

把所有配置表中单个Contract导航属性修改为集合类型,标识一对多关系中「一」的一方可以对应多个Contract:

public class CONF_Contract_Status
{
    [Key]
    public int CS_ID { get; set; }

    [Required]
    [Display(Name = "Status")]
    public string Contract_Status { get; set; }

    [Required]
    public bool Enabled { get; set; }

    // 修正为集合导航属性
    public ICollection<Contract> Contracts { get; set; }
}

CONF_Business_Unit、CONF_Brand、CONF_Statutory_Unit、CONF_Management_Market都需要做相同修改。

2. (可选)显式配置外键关联

因为你的配置表主键没有遵循EF Core默认命名约定(没有使用ID/Contract_StatusID这类命名),建议在DbContext的OnModelCreating方法中显式配置关联,避免约定匹配出错:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Contract>()
        .HasOne(c => c.Contract_Status)
        .WithMany(s => s.Contracts)
        .HasForeignKey(c => c.Contract_StatusID)
        .HasPrincipalKey(s => s.CS_ID);
    
    // 其他关联表也按照相同规则配置即可
}

修改完成后重新运行项目即可正常加载Index页所有行的关联数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:48:00