Задать вопрос

Где ошибка в описании сущностей?

Имеются две таблицы, закупки и адреса. В таблице закупки хранится id адреса, а в адресах содержится более подробная инфа об адресе соответственно. Описал каждый класс:
[Table("ADRESSES")]
    public class Adresses
    {
        [Key]
        [Column("INDEXADRESS")]
        public int ID { get; set; }
        [Column("NAIMENOVANIE")]
        public string NameAdress { get; set; }
        public List<Zakupki> Zakupki { get; set; }
    }
    [Table("ZAKUPKI")]
    public class Zakupki
    {

        [Key]
        [Column("INDEXZAKUPKI")]
        public int IndexZakupki { get; set; }

        [Column("DATEZAKUPKI")]
        public DateTime Date { get; set; }

        [Column("OTKUDA")]
        public int Otkuda { get; set; }

        [Column("KOLICHESTVO")]
        public int Kolichestvo { get; set; }

        [Column("SUMMA")]
        public float Summa { get; set; }

        [Column("PARTIYA")]
        public int PartiyaID { get; set; }

        [ForeignKey("PartiyaID")]
        public Partiya Partiya { get; set; }

        [ForeignKey("Otkuda")]
        public Adresses Adresses { get; set; }
    }

и в представлении, в foreach хочу вывести не id адреса, а его наименование, отсюда dbContext.Zakupki.Adresses Проблема в том, что Adresses почему-то null, как и Partiya, а все остальные данные берутся корректно. Вот и вопрос, либо так вообще делать нельзя, либо я неправильно описал что-то, либо не дописал?
  • Вопрос задан
  • 373 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 2
@Dzhamal
.NET разработчик
Надо сделать Fetch для адресов в закупках, либо сконфигурировать маппинг так, что бы эта связь не была lazy load. Такой поведение - особенность Entity Framework'a, и оно настраивается. Почитай документацию.
Ответ написан
@zakar1ya Автор вопроса
Junior
Как и сказал Виталий Литвинюк , проблема была из-за способа подгрузки связанных данных. Вместо lazy load сделал eagerly load, когда получал закупки из контекста dbContext.Zakupki.Include(b => b.Adresses).ToList();
Кому нужно, подробно здесь расписано.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ImmortalCAT
@ImmortalCAT
C# loving
только что тестил lazy eagerly and explicity
по бенчмарку ( самодельному с Stopwatch ) и всякими сборщиками мусора
самый быстрый был eagerly, он быстрее explicity
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы