Несколько отношений к одному объекту.Списки пусты - PullRequest
0 голосов
/ 10 мая 2019

У меня есть две таблицы в моей базе данных, которые связаны с 2x 1 для многих отношений с одним и тем же объектом.

Поскольку мы добавили второй DBLot2 в базу данных, список в DBLot больше не заполнен объектами.

Мы что-то здесь не так сделали?

    public class DBNesting
    {
         [Key]
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public long DBNestingID { get; set; }

         public DBLot DBLot { get; set; }

         [ForeignKey("DBLot")]
         public long DBLotID { get; set; }

         public DBLot DBLot2 { get; set; }

         [ForeignKey("DBLot2")]
         public long? DBLot2ID { get; set; }
    }

    public class DBLot
    {
         [Key]
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public long DBLotID { get; set; }

         public List<DBNesting> Nestingen { get; set; }
    }


    This is how we get the objects:

    DatabaseContext dc = new DatabaseContext();
    dc.DBNesting
    .include("DBLot")
    .include("DBLot2")
    .where(...)
    .ToList();

    However the other side is not working:
    dc.DBLot
    .include("Nestingen")
    .where(...)
    .ToList()

    I would expect that all the DBNesting where we used a DBLot in property 
    DBLot ore DBLot2 shoud be in Nestingen. But the collections are empty.

1 Ответ

0 голосов
/ 11 мая 2019
 dc.DBLot
    .include("Nestingen")
    .where(...)
    .ToList()

не будет включать в DBLot на Нестингене только прямой объект.

Таким образом, он будет иметь DBLot и список Nestingen, но в этом списке не будет DBLot каждого из Nestingen в списке.

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

dc.DBLot.include("Nestingen")
        .include("Nestingen.DBLot")
        .include("Nestingen.DBLot2")
        .where(...)
        .ToList()

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

вы можете включить отложенную загрузку ... но также с "ответственностью" не рекомендую

ef 6 не очень эффективен с include. также есть расширение, которое позволяет вам использовать типизированную версию, поэтому включите (x => x.Nestingen), просто выньте имена строк.

является целью иметь вложенные объектные отношения .. n-ые уровни. что-то вроде Древовидная структура данных в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...