Использование свойства навигации внутри свойства навигации - PullRequest
0 голосов
/ 10 января 2019

У меня есть 3 модели домена PdModel, PdTable, PdColumn. связь между таблицами довольно проста - PdModel имеет много PdTables, а PdTable имеет много PdColumns. Что мне нужно, так это заполнить мою IndexModel, чтобы я мог заполнить свой выпадающий список, используя синтаксис бритвы - например, выбрав раскрывающийся список для моделей, затем на следующем уровне раскрытия для конкретной модели для этих таблиц моделей и снова для столбцов этих таблиц.

Здесь я нашел подсказку, но она не работает: Заполнение свойств навигации в свойствах навигации

в соответствии с этим URL мой метод индекса выглядит так:

PdFolderTree =  _context.pdFolderTree.Include(x => x.pdModels)
                                                  .Include(x => x.pdModels.Select(y => y.PdTables))
                                                  .ToList();

Ошибка, которую я получаю: InvalidOperationException: выражение свойства 'x => {из PdModel y в x.pdModels select [y] .PdTables}' недопустимо. Выражение должно представлять доступ к свойству: 't => t.MyProperty'. Для получения дополнительной информации о включении связанных данных см. http://go.microsoft.com/fwlink/?LinkID=746393.

Я использую .NET Core razor-pages / MVC.

Кто-нибудь имел дело с чем-то похожим в прошлом?

Спасибо

public class PdModel
{ 
    [Key]
    public int Id { get; set; }
    public string ModelName { get; set; }

    public ICollection<PdTable> PdTables { get; set; } 

}

public class PdTable
{
    [Key]
    public int Id { get; set; }
    public int ModelId { get; set; }
    public string TableName { get; set; }

    [ForeignKey("ModelId")]
    public virtual PdModel PdModels { get; set; }

    public ICollection<PdColumn> PdColumns { get; set; }

} 

public class PdColumn
{
    [Key]
    public int Id { get; set; }
    public string ColumnName { get; set; }

    [ForeignKey("TableId")]
    public PdTable pdTable { get; set; }
}

1 Ответ

0 голосов
/ 10 января 2019

Я думаю, вам нужно использовать .ThenInclude()

Документация Microsoft , на которую вы ссылаетесь, дает следующий пример:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .ToList();
}

Так что я думаю, вам нужно сделать:

PdFolderTree =  _context.pdFolderTree.Include(tree => tree.pdModels)
                              .ThenInclude(model => model.PdTables)
                              .ThenInclude(table => table.PdColumns)).ToList();

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

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