Net Core - .Include()導致循環導致Visual Studio調試崩潰

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

我的數據庫在“UsageRecord”和“Dimension”之間有一對多的關係

數據庫圖

這建模如下(使用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();

緊急

郵差退出時出現502錯誤,VS Debug首先顯示問號列表“?”在崩潰之前。

我認為這是因為通過包含Dimension對象,這會循環遍歷UsageRecords列表,然後一次又一次地遍歷Dimension。

我怎麼能避免呢?

熱門答案

為了從LINQ查詢中檢索結果,您可以通過以下方式解決問題:

  • 配置序列化程序以忽略循環
  • 為控制器的操作創建視圖模型
  • 在控制器的操作中使用選擇結果中的匿名類型


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow