0
エンティティでコレクションの最初の値を返す:ASP.NETコアは唯一、私はその中にコレクションを持つクラス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; }
}
クラスステップと1対多の関係:
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つ以上のアイテムがありますが、レスポンスが返されたときは常にProcessStepsコレクションの最初のアイテムがMyClassから返されます。
Ok
編集:
これは、添付の私の外部キーが犯人だったとの応答を返すように見えます。外来キーの反復とヌル化は、固定されたものを持つようです。
foreach (Step step in MyEntity.ProcessSteps)
{
Step.MyEntity = null;
}
return Ok(MyEntity.ProcessSteps)
'var process'の直後にブレークポイントを置き、メモリ内のオブジェクトを調べると、' ProcessSteps'の下に複数の項目が表示されますか? –
必ずしも関連しているわけではありませんが、最初に 'Count()'を実行してから 'First()'を再度実行するのではなく、 'FirstOrDefault()'を使って 'null'をチェックしてください。 Latterは2つのクエリを実行します。 – poke
@NateBarbettini 'process'はまだ実行されていないクエリ可能なものなので、データベースから何もロードされません。 – poke