entity-framework - 如果子项已准备好在另一个语句中调用,则实体框架包括意外子项
问题描述
我正在使用 ASP.NET Core 3.1.2、Pomelo.EntityFramework 3.1.1 与 MySQL 数据库链接。这是一个演示我的问题的最小示例。
定义了两个模型类。该模型Field
包括多个区域:
public class Field
{
[Key]
public int Id { get; set; }
public virtual ICollection<Zone> Zones { get; set; }
public Field()
{
Zones = new HashSet<Zone>();
}
}
public class Zone
{
[Key]
public int Id { get; set; }
public int FieldId { get; set; }
public virtual Field Field { get; set; }
}
然后创建一个 API 来获取区域的数据。
[Route("api/field/{field}/zone/{id}")]
[HttpGet]
public async Task<ActionResult<List<Field>>> GetZone(
[FromRoute] int field,
[FromRoute] int id)
{
Zone Zone = await _context.Zone
.Where(m => m.FieldId == field && m.Id == id)
.SingleOrDefaultAsync();
return Ok(_context.Field);
}
在演示代码中,我希望返回Field
没有Zone
. 但是,结果包括Zone
equals id
if 调用的内容/api/field/16/zone/15
。
[
{
"zone": [],
"id": 7
},
{
"zone": [
{
"id": 15
}
],
"id": 16
}
]
如果孩子在另一个地方被调用,内容似乎会被保留。我不想还孩子。有什么建议么?
解决方案
您可以在类中的属性中添加 [JsonIgnore]
和[IgnoreDataMember]
属性。Zones
Field
public class Field
{
[Key]
public int Id { get; set; }
[JsonIgnore]
[IgnoreDataMember]
public virtual ICollection<Zone> Zones { get; set; }
public Field()
{
Zones = new HashSet<Zone>();
}
}
更多详情,请参阅此。
推荐阅读
- ruby - Ruby 中的逐行分析器
- java - 使用 SpringBoot 1.2.2 版的 Swagger 无法正常工作
- c++ - 具有多个字符分隔符的正则表达式
- python - 编写一个在图中找到哈密顿路径的 Python 函数
- python - 在 python 中获取某些文本的文件的问题
- spring-boot - Spring Boot:禁用数字到布尔值的自动转换
- python - 空列表 Python 美汤
- linux - ps aux 后 echo 不工作 | grep -ie $1 | awk '{打印 $2}' | xargs 杀死 -9
- css - 当不应该使用锚点呈现 Img 时
- python-3.x - 如何检查值中的所有字母