ASP.NET Core仅返回实体

时间:2016-08-02 21:48:39

标签: entity-framework asp.net-core entity-framework-core

我有一个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)

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,只有目标集合的第一个实体被返回,除非我设置为null所有内部引用。
但是我能够通过将我的模型映射到dto对象来解决这个问题(或者返回它之前的ViewModel)。 dto通常是模型实体的子集。通过这种方式,我不必将内部引用设置为null 总的来说,我认为仅向客户端返回严格需要的属性是一种很好的做法,而不会给出整个模型对象。