2015-03-11 4 views
0

У меня есть 2 таблицы:Лучший способ получить связанный объект объекты

Таблица 1 называется тип имеет идентификатор и имя
Таблица 2 называется подтип имеет свой идентификатор, имя и TypeID

TypeID является ссылкой на таблицу 1, и создается внешний ключ.

Мои объекты:

public class BType 
{ 
    [HiddenInput(DisplayValue = false)] 
    [Key] 
    public int Id { get; set; } 
    [Required(ErrorMessage = "Naam is verplicht")] 
    public string Naam { get; set; } 
} 

и

public class SubType 
{ 
    [HiddenInput(DisplayValue = false)] 
    [Key] 
    public int Id { get; set; } 
    [Required(ErrorMessage = "Naam is verplicht")] 
    public string Naam { get; set; } 
    [Required(ErrorMessage = "Type is verplicht")] 
    public int TypeID { get; set; } 

    private BType _Type = null; 

    public BType Type 
    { 
     get { 
      if (this._Type == null) 
      { 
       BTypeContext repo = new BTypeContext(); 
       this._Type = repo.BTypes.Where(x => x.Id == this.TypeID).FirstOrDefault(); 
      } 
      return this._Type; 
     } 
    } 

} 

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

В представлении мне нужно создать таблицу для подтипов, но мне также нужна информация для типа для этого подтипа.

Каков наилучший способ получить информацию о типе внутри подтипа?

ответ

1

Вы можете сделать свой родственный тип виртуального так, что EF лениво загружает данные, связанные с Я добавил ForeignKey атрибут для ясности

public class SubType 
{ 
    [HiddenInput(DisplayValue = false)] 
    [Key] 
    public int Id { get; set; } 

    [Required(ErrorMessage = "Naam is verplicht")] 
    public string Naam { get; set; } 

    [Required(ErrorMessage = "Type is verplicht")] 
    public int TypeID { get; set; } 

    [ForeignKey("TypeID")] 
    public virtual BType Type { get; set; } 
} 
+0

Если я добавить это, что я получаю следующее сообщение об ошибке: Существует уже откройте DataReader, связанный с этой Командой, который должен быть закрыт первым. И знаете ли вы, что этот вызов кэширован? например У меня есть 100 подтипов, которые используют один и тот же тип. Выполняет ли запрос только для типа, а затем кэширует его для следующих вызовов? Или он запрашивает 100x (для каждого объекта подтипа). –

+0

Игнорировать открытый Datareader: я решил это, добавив MultipleActiveResultSets = True в мою строку соединения. –

Смежные вопросы