c# - Entity Framework Core 自引用实体 JSON 响应
问题描述
我有一个 .Net Core 3.0 Web API 项目,我使用实体框架作为我的 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;
}
我通过 Postman 得到的回复是这样的:
[
{
"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": []
}
]
所以你可以看到当一个孩子有一个父母时,它会返回父母的数据和它的孩子。我想避免这种情况,但我实际上什么都想不出来。我能得到任何帮助吗?
解决方案
推荐阅读
- python - 如何使用这个标记器来标记一串代码?
- sql - SQL 查询以查找特定月份中的最后一个事件
- bash - 在 shell 脚本中执行 sql loader 后如何捕获被拒绝的记录数?
- mongodb - 如何过滤 MongoDB 中计数大于一的数据?
- angular - Angular - 获取 API 结果但无法转换为 JSON
- python - 障碍物检测的分离轴定理
- database - 存储图像的最佳方法
- swift - HealthKit 会不断更新模拟器上的样本数据,但不会更新 Apple Watch 上的实际数据
- python - 解析请求后调用中的 ssl 证书数据时无法解密错误
- java - Junit:org.junit.ComparisonFailure 问题,在 mvn clean install 时添加了额外的 $jacocoData +XXXX