Повторяющиеся элементы в результате JSON - Asp. Net Core API - PullRequest
0 голосов
/ 25 мая 2020

Опять же, у меня вопрос об этой древовидной структуре. Дело в том, что после вызова конечной точки, которая извлекает все дерево, некоторые данные дублируются. Будет лучше, когда я покажу JSON.

[
    {
        "name": "Node1",
        "subNodes": [
            {
                "name": "Node1_SubNode1",
                "subNodes": [],
                "subLeaves": [
                    {
                        "name": "File1"
                    }
                ]
            },
            {
                "name": "Node1_SubNode2",
                "subNodes": [],
                "subLeaves": []
            },
            {
                "name": "Node1_SubNode3",
                "subNodes": [],
                "subLeaves": []
            }
        ],
        "subLeaves": []
    },
    {
        "name": "Node1_SubNode1",
        "subNodes": [],
        "subLeaves": [
            {
                "name": "File1"
            }
        ]
    },
    {
        "name": "Node1_SubNode2",
        "subNodes": [],
        "subLeaves": []
    },
    {
        "name": "Node1_SubNode3",
        "subNodes": [],
        "subLeaves": []
    }
]

в конце, вы увидите, что узлы повторяются, потому что они уже появились в подузлах выше.

Я получаю узлы в стандартный способ:

var nodes = await _context.Nodes.Include(x => x.SubLeaves).ToListAsync();

Сущность My Node:

    public class Node
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int NodeId { get; private set; }
        public string Name { get; set; }
        public int? ParentNodeId { get; set; }
        [ForeignKey("ParentNodeId")]
        public Node ParentNode { get; set; }
        public List<Node> SubNodes { get; set; }
        public List<Leaf> SubLeaves { get; set; }
        public Node()
        {
            SubNodes = new List<Node>();
            SubLeaves = new List<Leaf>();
        }
    }

И конфигурация построителя моделей:

            modelBuilder.Entity<Node>()
                .HasMany(cat => cat.SubNodes)
                .WithOne(cat => cat.ParentNode);

есть ли способ быстро решить эту проблему? Может быть, я смогу сделать это с помощью automapper.

1 Ответ

0 голосов
/ 26 мая 2020

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

Я не знаю структуру данных вашего класса Node, поэтому я не могу указать специфику c код для использования.

...