我有一个MyEntity类,里面有一个集合:
public class MyEntity
{
[Key]
public int MyId { get; set; }
[Display(Name = "Process Name")]
public string ProcessName { get; set; }
public ICollection<Step> ProcessSteps { get; set; }
}
与班级的一对多关系:
public class Step
{
...
[ForeignKey("MyEntityForeignKey")]
public MyEntity { get; set; }
}
以下是返回指定MyEntity的API调用:
public async Task<IActionResult> MyEntity(int? id)
{
if (id == null)
{
return Ok(await _context.MyEntity.ToListAsync());
}
var process = _context.MyEntity.Where(f => f.MyId == id).Include(g => g.ProcessSteps);
if (process.Count() == 0)
{
return NotFound();
}
return Ok(process.First());
}
运行时,除了集合外,一切看起来都很棒。在调试时,会显示正确的值。即使我在这些集合中有2个以上的项目,它总是返回MyClass中ProcessSteps集合中的第一个项目,当它返回响应 Ok 时。
修改
看起来回复附带我的外键的响应是罪魁祸首。迭代和归零外键似乎已经解决了问题。
foreach (Step step in MyEntity.ProcessSteps)
{
Step.MyEntity = null;
}
return Ok(MyEntity.ProcessSteps)
答案 0 :(得分:0)
我有一个类似的问题,只有目标集合的第一个实体被返回,除非我设置为null所有内部引用。
但是我能够通过将我的模型映射到dto对象来解决这个问题(或者返回它之前的ViewModel)。 dto通常是模型实体的子集。通过这种方式,我不必将内部引用设置为null
总的来说,我认为仅向客户端返回严格需要的属性是一种很好的做法,而不会给出整个模型对象。