Получить полную иерархию адресов (проблема с отложенной загрузкой) - PullRequest
0 голосов
/ 17 июля 2011

Я использую 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 всегда почему-то равен нулю.

Как я могу получить адрес и сделать все остальные объекты информации (области, города, района и страны) не равными нулю?

1 Ответ

2 голосов
/ 17 июля 2011

Если вы знаете, что они вам понадобятся, просто используйте готовую загрузку:

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

Если отложенная загрузка не работает, когда вы отмечаете Area virtual, значит что-то не так.

...