You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core用Collection.LoadAsync加载User.BookMarks后,如何加载BookMark.VgnItmEst?

解决方案

你可以通过两种方式同时加载BookMark.VgnItmEst导航属性:

方案一:使用Include + ThenInclude 一次性查询(推荐)

直接在查询用户时,通过Include指定要加载的BookMarks集合,再用ThenInclude嵌套加载BookMark关联的VgnItmEst属性,这样能避免多次数据库查询,性能更优:

public async override Task<User> Fetch(string id)
{
    var user = await entities
        .Include(u => u.BookMarks)
            .ThenInclude(bm => bm.VgnItmEst)
        .FirstOrDefaultAsync(u => u.Id == id);
    return user;
}

方案二:显式加载嵌套导航属性

如果必须保留先FindAsync再加载的方式,可以通过Collection.Query()方法获取集合的查询对象,再附加Include来加载嵌套的VgnItmEst,最后执行LoadAsync:

public async override Task<User> Fetch(string id)
{
    var user = await entities.FindAsync(id);
    if (user != null)
    {
        await context.Entry(user)
            .Collection(u => u.BookMarks)
            .Query()
            .Include(bm => bm.VgnItmEst)
            .LoadAsync();
    }
    return user;
}

注意:第二种方式会触发两次数据库查询(一次Find,一次Load),如果没有特殊场景,优先选择方案一。

内容的提问来源于stack exchange,提问作者BeniaminoBaggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:58:15