ASP.NET Core僅返回實體中集合的第一個值

asp.net-core entity-framework 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; }
}

與課程的一對多關係Step:

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)

熱門答案

我有一個類似的問題,其中只返回目標集合的第一個實體,除非我設置為null所有內部引用。
但是我能夠通過在返回之前將我的模型映射到dto對象(或ViewModel)來解決這個問題。 dto通常是模型實體的子集。通過這種方式,我不必將內部引用設置為null。

一般來說,我認為只返回客戶端只需要嚴格需要的屬性 ,而不給出整個模型對像是一個好習慣。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow