Entity framework core 在调用DbSet之前,导航属性为Null 安装程序

Entity framework core 在调用DbSet之前,导航属性为Null 安装程序,entity-framework-core,Entity Framework Core,我正在进入实体框架核心(2.1),在处理建立的关系时遇到了问题。为了保持简单,我在person和address表之间建立了一个简单的一对一关系: public class Person { public int ID { get; set; } public string LastName { get; set; } public string FirstName { get; set; } public PersonAddress Address { get;

我正在进入实体框架核心(2.1),在处理建立的关系时遇到了问题。为了保持简单,我在person和address表之间建立了一个简单的一对一关系:

public class Person
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }

    public PersonAddress Address { get; set; }
}

public class PersonAddress
{
    public int ID { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public int ZipCode { get; set; }

    public int PersonID { get; set; }
    public virtual Person Person { get; set; }
}
通过两者之间的简单明确链接(以确保这不是事物如何连接的问题):

当我查看本地变量并查看变量“miles”时,其地址字段的值为Null。此外,如果要在即时窗口中调用DbSet地址,“miles”对象中的Address值设置为正确的值


发生什么事了?实体何时实际设置导航属性?我需要填充数据时是否应该调用其他表?背景中有什么我需要改变的地方吗?

哎呀,看起来我就在几次谷歌搜索之外

看起来我应该在加载DbSet时使用.Include扩展,如下所示:

public PeopleController(SmallGroupsSiteContext context)
{
    _context = context;

    Person miles = context.Person.Include(person => person.Address).First();
    Debug.Print(miles.Address.ToString());
}

与谷歌搜索相比,你最好从那里开始。您会发现,即时加载(
Include
/
然后Include
)不是唯一的选项:),但默认情况下,没有任何选项(甚至需要启用)加载相关数据。
public PeopleController(SmallGroupsSiteContext context)
{
    _context = context;

    Person miles = context.Person.First();
    Debug.Print(miles.Address.ToString());
}
public PeopleController(SmallGroupsSiteContext context)
{
    _context = context;

    Person miles = context.Person.Include(person => person.Address).First();
    Debug.Print(miles.Address.ToString());
}