Как включить данные таблицы и нажать между объектами без какого-либо отношения внешнего ключа - PullRequest
0 голосов
/ 16 ноября 2018

У меня следующая структура таблиц

TableA -> TableB (FK с таблицей A) -> TableC (FK с таблицей B)

TableX -> TableY (FK с таблицей X идругой FK с таблицей C)

Я использую платформу .NET core EF и сгенерированные классы, нет прямой связи между классами TableC и TableX

public partial class TableA
    {
        public TableA()
        {
            TableB = new HashSet<TableB>();
        }
        public int Id { get; set; }
        public string Email { get; set; }     
        public ICollection<TableB> TableB { get; set; }

    }

 public partial class TableB
    {
        public TableB()
        {
            TableC = new HashSet<TableC>();
        }
        //Other prop

        public Users tableA { get; set; }
        public ICollection<TableC> tableC { get; set; }

    }

 public partial class TableC
    {
        public TableC()
        {
            tableY = new HashSet<TableY>();
        }
        //Other prop
        public TableB tableB { get; set; }
        public ICollection<TableY> tableY { get; set; }

    }

 public partial class TableY
    {
        //Other prop
        public TableC tableC { get; set; }
        public TableX tableX { get; set; }
    }

   public partial class TableX
    {   
        public TableX()
        {
            tableX = new HashSet<TableX>();
        }
        //Other prop
        public ICollection<TableX> tableX { get; set; }
    }

Я использую запрос ниже

_context.TableA.Where(x => x.Email == email.Trim())
                        .Include(i => i.TableB )
                        .ThenInclude(k => k.TableC)
                        .ThenInclude(l => l.TableY)

Я скучаю по TableX из цепочки объектов и ищу запрос, который может сделать TableX дочерним объектом TableC, как показано ниже

TableA -> TableB -> TableC -> TableX -> TableY

, когда я использую запрос ниже

 _context.TableA.Where(x => x.Email == email.Trim())
                            .Include(i => i.TableB )
                            .ThenInclude(k => k.TableC)
                            .ThenInclude(l => l.TableY.Select(g => g.tableX))

Я получаю ошибку

ArgumentException: лямбда-выражение свойства Include 'p => p.Бронирование недействительно.Выражение должно представлять доступ к свойству: 't => t.MyProperty'.Чтобы нацелить навигацию, объявленную на производные типы, укажите лямбда-параметр с явно заданным типом целевого типа, например, «(Derived d) => d.MyProperty».

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