Entity Framework Core 3 Preview 7-包含在Where中使用的属性所必需

时间:2019-07-28 00:19:45

标签: c# asp.net-core ef-core-3.0

以前这可以工作:

max-age

现在我需要为“用户”对象添加“包含”

var query = _context.Favourites
                    .Where(o => o.User.UserId == user.UserId);

是吗? var query = _context.Favourites .Include(o => o.User) .Where(o => o.User.UserId == user.UserId); 中的内容是否已更改?

如果不包含它,我将得到一个不友好的异常。

2 个答案:

答案 0 :(得分:0)

否则,您可以将User属性设为virtual,以便启用延迟加载。但是Include()是更可取的,因为它将查询数据库一次以检索所有必需的数据。

答案 1 :(得分:0)

Entity Framework Core允许您使用模型中的导航属性来加载相关的实体。共有三种常见的O / RM模式用于加载相关数据。

急切加载是指作为初始查询的一部分从数据库中加载相关数据。

显式加载是指以后从数据库中显式加载相关数据。

延迟加载是指在访问导航属性时从数据库透明地加载相关数据。

何时使用紧急加载

  • 在您确定每次使用的一对多关系的“一侧”中 与主要实体在哪里。例如收藏夹的用户属性。类别 产品的属性。
  • 一般来说,当关系不是太多并且 渴望加载将是减少对以下内容的进一步查询的好习惯 服务器。

何时使用延迟加载

  • 几乎在一对多关系的每个“集合方”。喜欢 用户或类别产品的收藏夹。

  • 您完全知道您将不需要即时的财产。

注意:延迟加载可能存在处置问题。

有关在EF Core中加载相关数据的更多详细信息,您可以参考the official documentation