未在Lazy Load中加载导航属性

时间:2014-11-03 13:54:14

标签: c# entity-framework lazy-loading poco

我创建了这两个类(POCO)...

public class Address
{
    public int Id { get; set; }
    public string Street { get; set; }
    public string Number { get; set; }
    public string Neighborhood { get; set; }
    public string ZipCode { get; set; }

    public int CityId { get; set; }
    public virtual City City { get; set; }
}

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Address> Addresses { get; set; }
}

...然后我映射......

public class AddressMap : EntityTypeConfiguration<Address>
{
    public AddressMap()
    {
        ToTable("Address");

        HasKey(p => p.Id);
        ...
        ...

        HasRequired(p => p.City)
            .WithMany(p => p.Addresses)
            .HasForeignKey(p => p.CityId);
    }
}

public class CityMap : EntityTypeConfiguration<City>
{
    public CityMap()
    {
        ToTable("City");

        HasKey(p => p.Id);
        ...
        ...

        HasMany(p => p.Addresses)
            .WithRequired(p => p.City)
            .HasForeignKey(p => p.CityId);
    }
}

然后我用两种方法创建一个类:

  • FindCityById返回城市及其各自的地址...... Context.Cities.Find(key)
  • GetAllAddresses(仅用于测试目的) Context.Addresses.ToList()

当我使用FindCityById时......相关的地址已加载!

当我使用GetAllAddresses时,CityId有值,但City始终为空。

ProxyCreationEnabledLazyLoadingEnabled是&#34; true&#34;。

为什么我在地址课程中没有加载城市?

1 个答案:

答案 0 :(得分:0)

HasRequired 方法后使用 WithRequiredPrincipal WithRequiredDependent

查看Entity Framework documentation

在大多数情况下,实体框架可以推断哪种类型是依赖关系,哪种类型是关系中的主体。但是,当关系的两端都是必需的或双方都是可选的时,实体框架无法识别依赖关系和主体。如果需要关系的两端,请在HasRequired方法之后使用WithRequiredPrincipal或WithRequiredDependent。