0
我在它的一類myEntity所用的集合:ASP.NET Core僅返回集合的第一值在實體
public class MyEntity
{
[Key]
public int MyId { get; set; }
[Display(Name = "Process Name")]
public string ProcessName { get; set; }
public ICollection<Step> ProcessSteps { get; set; }
}
帶班步驟A一對多關係:
public class Step
{
...
[ForeignKey("MyEntityForeignKey")]
public MyEntity { get; set; }
}
下面是API調用返回指定myEntity所:
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());
}
運行此,一切看起來除了在t大他收集。在調試時,顯示正確的值。即使我在這些集合中有2+項,它總是隻返回來自MyClass的ProcessSteps集合中的第一個項目,當它返回響應 Ok。
編輯:
它看起來好像回到我的連接外鍵的反應是罪魁禍首。迭代並清零外鍵似乎已經修復了一些問題。
foreach (Step step in MyEntity.ProcessSteps)
{
Step.MyEntity = null;
}
return Ok(MyEntity.ProcessSteps)
如果你在'var process'後面放置一個斷點並檢查內存中的對象,在ProcessSteps下顯示多個項目? –
不一定相關,但應該使用'FirstOrDefault()'並檢查'null',而不是先運行Count(),然後再運行First()。後者將運行兩個查詢。 – poke
@NateBarbettini'process'只是一個尚未執行的查詢語句,因此沒有任何內容從數據庫加載。 – poke