Net Core - .Include()によってループが発生し、Visual Studioのデバッグがクラッシュする

asp.net-core-mvc dbcontext eager-loading entity-framework-core visual-studio-2017

質問

私のデータベースは、 "UsageRecord"と "Dimension"の間に1対多の関係があります。

データベースダイアグラム

これは、次のようにモデル化されています(Database-Firstアプローチを使用)。

public partial class Dimension
    {               
        ...          
        public virtual ICollection<UsageRecord> UsageRecord { get; set; }       
    }

使用レコードクラス:

      public partial class UsageRecord
        {
            public long Id { get; set; }
            ...
            public long DimensionId { get; set; }    
            public virtual Dimension Dimension { get; set; }              
        }

だから、私はUsageRecords(EagerLoading)のリストを照会する場合:

_context.Set<UsageRecord>.Where(x => x.ProductId == productId).ToList()

デバッグ中にナビゲートできるUsageRecordオブジェクトのリストが表示されます。 使用記録

Dimensionオブジェクトがnullであることに注意してください。これは、クエリには含まれていないため、これは正しいです。

今、私がそれを含めると、アプリケーションがクラッシュします:

_context.Set<UsageRecord>.Where(x => x.ProductId == productId).Include(p => p.Dimension).ToList();

クラッシュ

Postmanは502エラーで終了し、VS Debugは最初に疑問符 "?"のリストを表示します。クラッシュする前に

これは、Dimensionオブジェクトを含めることによって、添付されたUsageRecordsのリストをループし、Dimensionを何度も繰り返すことによるものだと思います。

どうすればそれを避けることができますか?

人気のある回答

LINQクエリから結果を取得するには、次の方法で問題を解決できます。

  • ループを無視するようにシリアライザを構成する
  • コントローラのアクション用のビューモデルを作成する
  • あなたのコントローラのアクションでSelect結果から匿名タイプを使用する


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow