实体框架核心自引用实体JSON响应

时间:2020-02-25 16:16:41

标签: c# .net entity-framework .net-core entity-framework-core

我有一个.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": []
    }
]

因此您可以看到,当孩子有父母时,它将返回父母的数据及其孩子。我想避免这种情况,但我实际上什么也没想到。我可以得到任何帮助吗?

0 个答案:

没有答案