ASP.NETコアは、エンティティ内のコレクションの最初の値のみを返します

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; }
}

クラスとの1対多の関係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+のアイテムを持っているにもかかわらず、それはOK応答を返すとき、それは常にMyClassのからProcessStepsコレクションにちょうど最初の項目を返します。

編集:

私の外来キーを添付して返答を返すように見えたのは、犯人でした。外来キーの反復とヌル化は、固定されたものを持つようです。

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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ