0

我正在使用實體框架4.1 - 代碼優先。我保存用戶的地址如下:獲取完整地址層次結構(延遲加載問題)

國家 - >區 - >市 - > - >區域 - >地址

只適用於我的國家內的地址,我提供了所有可用區,市和地區該國家如此用戶可以從中選擇。然後他填寫地址表中存儲的地址詳細信息。

爲了使之更清楚,看看下面的例子:

public class Address 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    [MaxLength(500)] 
    public string Details { get; set; } 
    public bool IsDefaultAddress { get; set; } 
    public string CountryName { get; set; } 
    public Area Area { get; set; } 
    public virtual User User { get; set; } 
} 

public class Area 
{ 
    public int Id { get; set; } 
    public string GoogleName { get; set; } 
    public string FamiliarName { get; set; } 
    public virtual ICollection<Address> Addresses { get; set; } 
    public virtual City City { get; set; } 

    public string GetName 
    { 
     get { return FamiliarName ?? GoogleName; } 
    } 
} 

public class City 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual District District { get; set; } 
    public virtual ICollection<Area> Areas { get; set; } 
} 

public class District 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<City> Cities { get; set; } 
    public virtual Country Country { get; set; } 
} 

public class Country 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<District> Districts { get; set; } 
} 

我注意到,我是否使用virtual關鍵字或沒有,沒有什麼變化。由於某些原因,Area始終爲空。

如何檢索地址並讓所有其他信息(區域,城市,地區和國家)的對象不爲空?

+0

你是否正確映射了你的實體?顯示你的映射代碼 – Eranga

回答

2

如果你知道你會需要它們簡單地使用預先加載:當你標記Areavirtual然後還有其他事情

var address = context.Address.Include(a => a.Area.City.District.Country).Where(...); 

如果延遲加載不起作用是錯誤的。