考虑Person
和Address
类定义为
class Person
{
public int PersonId { get; set; }
public virtual Address Address { get; set; }
}
class Address
{
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}
其中只有一些人有一个地址,但所有地址都有一个人。这是一对零或一的关系,所以我将其配置为
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonId)
.HasRequired(a => a.Person)
.WithOptional(a => a.Address);
现在,在我的代码中,以下方法(急切加载)工作得非常好。
var person = context.Person
.Include(a => a.Address)
.Single(a => a.PersonId == 123);
var address = person.Address; // address != null (correct)
但是,以下方法(延迟加载)没有。
var person = context.Person
.Single(a => a.PersonId == 123);
var address = person.Address; // address == null (incorrect)
此外,我连接了 SQL Profiler,我可以看到 EF 在第二种情况下甚至没有尝试延迟加载地址——它只是返回 null。
我一直无法找到任何说明 EF 不会延迟加载一对零或一导航属性的文档。这是设计使然,是错误还是我做错了什么?
我使用 Entity Framework 5 和 Entity Framework 6 Alpha 3 对此进行了测试,并获得了相同的结果。