【发布时间】:2018-09-09 02:25:04
【问题描述】:
设置
我正在使用 Entity Framework Core (2.1),但在处理建立的关系时遇到了问题。为了简单起见,我在人员和地址表之间建立了简单的一对一关系:
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; }
}
两者之间有一个简单的明确链接(以确保这不是事物连接方式的问题):
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOne(p => p.Address)
.WithOne(a => a.Person);
modelBuilder.Entity<PersonAddress>()
.HasOne(a => a.Person)
.WithOne(p => p.Address);
}
这是我的问题
这个项目是在一个 asp.net 核心应用程序中设置的,我在“PeopleController”构造函数的末尾设置了一个断点。我还添加了一行,将第一个人从 DbSet 中取出并将其分配给一个变量:
public PeopleController(SmallGroupsSiteContext context)
{
_context = context;
Person miles = context.Person.First();
Debug.Print(miles.Address.ToString());
}
当我查看本地人并查看变量“miles”时,其地址字段的值为 Null。此外,如果我要在即时窗口中调用 DbSet 地址,“英里”对象中的地址值将设置为正确的值。
发生了什么事? Entity 何时真正设置导航属性?我是否应该像填充数据一样调用其他表?后台有什么懒惰的事情需要我改变吗?
【问题讨论】: