首页 > 解决方案 > 使用实体框架获取子对象时父对象为空

问题描述

public class AcsBatchingDbContext : DbContext
{
    public DbSet<CardHolder> CardHolders { get; set; }
    public DbSet<AccessCard> AccessCards { get; set; }
}

public class CardHolder
{
    public int CardHolderId { get; set; }
    public ICollection<AccessCard> AccessCards { get; set; };
}


public class AccessCard
{

    public int AccessCardId { get; set; }
    public CardHolder CardHolder { get; set; }
}

当我尝试获取 AccessCards

using (var db = new AcsBatchingDbContext())
{
    var cards = db.AccessCards.ToList();
}

其中 card.CardHolder = null

为什么?为什么EF不抢持卡人?

另一个问题:

为什么这个表达式不编译?

db.AccessCards.Include(x => x.CardHolder).ToList();

为什么唯一的选择是使用

db.AccessCards.Include("CardHolder").ToList();

标签: entity-frameworkentity-framework-6

解决方案


您应该使用 include 来加载CardHolder实体。

(这需要using System.Data.Entity;

db.AccessCards.Include(x => x.CardHolder).ToList();

或者,您可以Include像这样申请;

db.AccessCards.Include("CardHolder").ToList();

推荐阅读