亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數據庫查詢中使用 .Include() 會創建無限循環的數據

在數據庫查詢中使用 .Include() 會創建無限循環的數據

C#
慕工程0101907 2022-06-12 11:19:24
問題:我正在使用 LINQ 對關系數據庫的實體框架上下文進行查詢。與EFCore 關系一起,我創建了一個包含一些關系的數據庫,但是當我使用 ASP.NET 將數據發送到服務器時,我得到了這些關系的空值。稍加挖掘,我發現我需要使用_context.Post.Include("Blog")它來發送數據,因為它使用延遲加載。但是,通過這樣做,它在 JsonResult 中創建了一個“無限循環”。最終返回的數據似乎被減半,加載它時出現 JSON 解析錯誤,因為它缺少 JSON 數據的后半部分。示例返回值{"id": 0, "blogId": 1, "blog": {"postId":0這就是它返回的所有內容,因為該 postId 之后的任何內容都將是對原始帖子的引用,而原始帖子又是對博客的引用。有什么方法可以使用 LINQ 在返回中排除 post 對象,類似于首先包含博客的方式?
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

這是 JSON 序列化問題。在 JSON 流序列化程序文檔中搜索如何解決“循環引用”問題。不同的流序列化器提供不同的解決方案:

  1. 配置最大深度

  2. 基于引用緩存的歷史記錄

  3. 將特定類型的序列化程序配置為不使用“導航屬性”

其他解決方案 - 不要使用流序列化器 - 就地配置序列化器功能。

還有一個 - 使用 DTO 類(沒有循環引用)。

您還可以嘗試分離實體并將 null 設置為您要忽略的每個導航屬性,但這很丑陋,不推薦使用。


查看完整回答
反對 回復 2022-06-12
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

固定的!我采用了來自包含關系的數據庫的模型,然后使用 foreach 來取消反向引用。


var blog = await _context.Blog

    .Include(x => x.Posts)

    .SingleAsync(x => x.Id == id);


foreach (Post post in blog.Posts)

{

    post.Blog = null;

}

return Ok(blog);


查看完整回答
反對 回復 2022-06-12
  • 2 回答
  • 0 關注
  • 222 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號