2 回答

TA貢獻1735條經驗 獲得超5個贊
您可能需要為查詢中的“OwnedItems”導航屬性啟用即時加載: https ://docs.microsoft.com/en-us/ef/core/querying/related-data#eager-loading
如果我應該舉個例子,請發布您的完整 linq 查詢。
更新 1
似乎子查詢在 EF Core 中有 N+1 個問題,它可能會在版本 3 中修復。
參考:https ://github.com/aspnet/EntityFrameworkCore/issues/10001
更新 2
如果您不需要完全實現“項目”,您應該能夠做這樣的事情,您可以創建一個匿名對象,而不是應該將 EF “欺騙”成您想要的:
from item in Items
select new
{
Owned = OwnedItems.Any(own => own.UserId == userId && own.ItemId == item.Id),
Item = new { Id = item.Id, Name = item.Name }
}
參考:https ://github.com/aspnet/EntityFrameworkCore/issues/11186

TA貢獻1891條經驗 獲得超3個贊
您需要告訴 EF 加載相關數據,在本例中為OwnedItems表。
解決此問題的一種方法是包含相關表。如果有鏈接表的外鍵,則可以像這樣輕松完成:
var dataWithRelatedData = db_context.Items.Include(x => x.OwnedItems).Select ...
避免大量往返數據庫的另一種方法是將兩個數據集加載到單獨的查詢中,然后將它們合并到內存中。因此,您將首先對Items進行查詢,然后將數據返回到OwnedItems的另一個查詢,最后將它們合并到一個對象列表中。這只會對數據庫進行 2 次調用,從而提高性能。
- 2 回答
- 0 關注
- 126 瀏覽
添加回答
舉報