我正在使用Entity Framework 4.1 - Code First。我按如下方式存储用户的地址:
国家/地区 - >区 - >城市 - > - >面积 - >地址
这仅适用于我所在国家/地区的地址,我提供该国家/地区的所有可用地区,城市和地区,以便用户可以选择。然后他填写了存储在地址表中的地址详细信息。
为了更清楚,请看看以下内容:
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 :(得分:2)
如果您知道您将需要它们,只需使用预先加载:
var address = context.Address.Include(a => a.Area.City.District.Country).Where(...);
如果在标记Area
virtual
时延迟加载不起作用,则其他错误。