Entity Framework Core相关对象急加载失效问题求助
EF Core 急加载关联对象失败的解决方案
问题根源
你的User类中Session属性仅定义了getter,没有setter:
public Session Session { get; }
EF Core需要通过setter(即使是私有setter)来为导航属性赋值,没有setter的话,即便查询时触发了关联数据加载,也无法将数据注入到Session属性中,导致该属性始终为null。
另外,查询语句中直接使用u.Session.SessionID作为筛选条件,虽然EF会自动生成关联查询,但核心问题还是属性无法被赋值。
修复步骤
为
Session属性添加setter
可以选择公开setter,或者保持封装性使用私有setter(EF Core支持访问私有setter):// 方式1:公开setter public Session Session { get; set; } // 方式2:私有setter(推荐,保持类的封装性) public Session Session { get; private set; }优化查询语句(可选)
虽然不是导致加载失败的直接原因,但显式关联Sessions表进行筛选会更清晰,避免隐式关联可能带来的歧义:user = db.Users .Include(u => u.Session) .FirstOrDefault(u => u.Session.SessionID == result.requestObj.Session.ID); // 或者显式关联写法 user = db.Users .Include(u => u.Session) .Join(db.Sessions, u => u.UserID, s => s.UserID, (u, s) => new { User = u, Session = s }) .Where(x => x.Session.SessionID == result.requestObj.Session.ID) .Select(x => x.User) .FirstOrDefault();
验证修复
修改属性后,无论是使用.Include()还是AutoInclude()配置,EF Core都能正常将关联的Session数据赋值到User对象的Session属性中,无需再手动调用Load()发起额外请求。
内容的提问来源于stack exchange,提问作者Tyler Wanta
相关产品推荐
相关产品推荐

