私のデータベースをクラッシュするには、Visual Studioのデバッグを引き起こしこれは次のようにモデル化され ネットコア - ループ内で.INCLUDE()の結果
「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オブジェクトのリストを取得する:
Dimensionオブジェクトがnullであることに注意してください、これはクエリには含まれていないため、これは正しいです。今
、私は、アプリケーションがクラッシュし、それを含めるようにしよう:
_context.Set<UsageRecord>.Where(x => x.ProductId == productId).Include(p => p.Dimension).ToList();
ポストマンは、502エラーで終了し、VSのデバッグは、最初の疑問符のリストを示し、「?」クラッシュする前に
これは、Dimensionオブジェクトをインクルードすることで、添付されたUsageRecordsのリストを繰り返してからDimensionを何度もループすることによるものだと思います。
どうすればよいですか?
この場合、シリアル化で無限ループを避けるために匿名型を作成するか、シリアライザでloを無視するように設定する必要がありますOPS –
はい、既知の問題のようだ:それはMVCに関連して、起動時にシリアライズにループを無視して「解決」することができhttps://github.com/aspnet/EntityFramework/issues/7564 : services.AddMvc ().AddJsonOptions(オプション=> options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore); – alessalessio
この時点で、ビューモデルや匿名タイプを作成して要件を解決できますか?解決しましたか? –