1

私のデータベースをクラッシュするには、Visual Studioのデバッグを引き起こしこれは次のようにモデル化され ネットコア - ループ内で.INCLUDE()の結果

Database diagram

「UsageRecord」と「ディメンション」の間に1対多の関係を持っています(データベース・ファーストアプローチを使用して)、次のとおりです。

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

使用Recordクラス:

 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オブジェクトのリストを取得する: usage record

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

、私は、アプリケーションがクラッシュし、それを含めるようにしよう:

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

crash

ポストマンは、502エラーで終了し、VSのデバッグは、最初の疑問符のリストを示し、「?」クラッシュする前に

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

どうすればよいですか?

+0

この場合、シリアル化で無限ループを避けるために匿名型を作成するか、シリアライザでloを無視するように設定する必要がありますOPS –

+0

はい、既知の問題のようだ:それはMVCに関連して、起動時にシリアライズにループを無視して「解決」することができhttps://github.com/aspnet/EntityFramework/issues/7564 : services.AddMvc ().AddJsonOptions(オプション=> options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore); – alessalessio

+0

この時点で、ビューモデルや匿名タイプを作成して要件を解決できますか?解決しましたか? –

答えて

1

あなたはこれらの方法で、あなたの問題が解決することができますLINQクエリから、あなたの結果を取得するために:

  • は、コントローラのアクション
  • 使用匿名のためのビューモデルを作成し、ループを無視するようにシリアライザを設定

    • をタイプからコントローラのアクションの結果を選択
  • +0

    *** "あなたのコントローラのアクション用のビューモデルを作成する" ***問題を解決しました私は持っていた。 –

    関連する問題