Entity Framework Ядро самоссылающейся сущности JSON ответ - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть проект. Net Core 3.0 Web API, и я использую Entity Framework в качестве ORM. У меня есть самоссылающаяся сущность, которая выглядит следующим образом:

public partial class Category
{
    public Category()
    {
        Events = new HashSet<Event>();
        InverseParentCategory = new HashSet<Category>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentCategoryId { get; set; }

    public virtual Category ParentCategory { get; set; }
    public virtual ICollection<Event> Events { get; set; }
    public virtual ICollection<Category> InverseParentCategory { get; set; }
}

И это метод действия в моем CategoriesController, который возвращает все категории в виде JSON объекта:

    [HttpGet]
    public async Task<IActionResult> GetAllCategories()
    {
        var allCategories = await _categoryService.GetCategories();
        return Ok(allCategories);
    }

И это мой GetCategories метод в моем CategoryService:

    public async Task<IEnumerable<Category>> GetCategories()
    {
        var allCategories = await _context.Categories.ToListAsync();
        return allCategories;
    }

Ответ, который я получаю через Почтальон, таков:

[
    {
        "id": 1,
        "name": "Soccer",
        "parentCategoryId": null,
        "parentCategory": null,
        "events": [],
        "inverseParentCategory": [
            {
                "id": 3,
                "name": "Basketbal",
                "parentCategoryId": 1,
                "events": [],
                "inverseParentCategory": []
            },
            {
                "id": 4,
                "name": "Volleyball",
                "parentCategoryId": 1,
                "events": [],
                "inverseParentCategory": []
            },
            {
                "id": 5,
                "name": "",
                "parentCategoryId": 1,
                "events": [],
                "inverseParentCategory": []
            },
            {
                "id": 6,
                "name": "dada",
                "parentCategoryId": 1,
                "events": [],
                "inverseParentCategory": []
            }
        ]
    },
    {
        "id": 2,
        "name": "Basketbal",
        "parentCategoryId": null,
        "parentCategory": null,
        "events": [],
        "inverseParentCategory": []
    },
    {
        "id": 3,
        "name": "Basketbal",
        "parentCategoryId": 1,
        "parentCategory": {
            "id": 1,
            "name": "Soccer",
            "parentCategoryId": null,
            "parentCategory": null,
            "events": [],
            "inverseParentCategory": [
                {
                    "id": 4,
                    "name": "Volleyball",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 5,
                    "name": "",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 6,
                    "name": "dada",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                }
            ]
        },
        "events": [],
        "inverseParentCategory": []
    },
    {
        "id": 4,
        "name": "Volleyball",
        "parentCategoryId": 1,
        "parentCategory": {
            "id": 1,
            "name": "Soccer",
            "parentCategoryId": null,
            "parentCategory": null,
            "events": [],
            "inverseParentCategory": [
                {
                    "id": 3,
                    "name": "Basketbal",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 5,
                    "name": "",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 6,
                    "name": "dada",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                }
            ]
        },
        "events": [],
        "inverseParentCategory": []
    },
    {
        "id": 5,
        "name": "",
        "parentCategoryId": 1,
        "parentCategory": {
            "id": 1,
            "name": "Soccer",
            "parentCategoryId": null,
            "parentCategory": null,
            "events": [],
            "inverseParentCategory": [
                {
                    "id": 3,
                    "name": "Basketbal",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 4,
                    "name": "Volleyball",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 6,
                    "name": "dada",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                }
            ]
        },
        "events": [],
        "inverseParentCategory": []
    },
    {
        "id": 6,
        "name": "dada",
        "parentCategoryId": 1,
        "parentCategory": {
            "id": 1,
            "name": "Soccer",
            "parentCategoryId": null,
            "parentCategory": null,
            "events": [],
            "inverseParentCategory": [
                {
                    "id": 3,
                    "name": "Basketbal",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 4,
                    "name": "Volleyball",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                },
                {
                    "id": 5,
                    "name": "",
                    "parentCategoryId": 1,
                    "events": [],
                    "inverseParentCategory": []
                }
            ]
        },
        "events": [],
        "inverseParentCategory": []
    }
]

Так что вы можете видеть, что когда у ребенка есть родитель, он возвращает данные родителя и его детей. Я хочу избежать этого, но я не могу думать ни о чем. Могу ли я получить какую-либо помощь?

...