2014-11-03 67 views
0

我已經創建這兩個類(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是「真」。

爲什麼在我在地址課上的城市沒有加載?

+0

你是什麼意思,它沒有加載,因爲它是延遲加載,它會在您嘗試訪問集合中的地址時加載。 – 2014-11-03 16:09:12

+0

我在這裏找到答案http://stackoverflow.com/questions/22194266/ef6-does-not-lazy-load-navigation-property?rq=1 EF需要一個顯式的構造函數聲明。 – 2014-11-03 20:47:46

回答

0

使用WithRequiredPrincipalWithRequiredDependent後HasRequired方法。

看一看Entity Framework documentation

在大多數情況下,實體框架可以推斷哪種類型的依賴性,這是一個關係的主體。但是,如果需要關係的兩端或者雙方都是可選的,則實體框架不能識別依賴關係和主體。當需要關係的兩端時,在HasRequired方法之後使用WithRequiredPrincipal或WithRequiredDependent。