首页 > 解决方案 > Entity Framework Core 3 Preview 7 - 包括 Where 中使用的属性所必需的

问题描述

以前这会起作用:

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);

那正确吗?这改变了Entity Framework Core 3 Preview 7吗?

如果我不包括它,我会得到一个不友好的例外。

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

解决方案


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

急切加载意味着从数据库加载相关数据作为初始查询的一部分。

显式加载意味着稍后从数据库中显式加载相关数据。

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

何时使用急切加载

  • 在一对多关系的“一侧”中,您确定在任何地方都使用主实体。喜欢收藏夹的用户属性。产品的类别属性。
  • 通常,当关系不是太多时,急切加载将是减少服务器上进一步查询的好习惯。

何时使用延迟加载

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

  • 您确切地知道您不会立即需要财产。

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

有关在 EF Core 中加载相关数据的更多详细信息,您可以参考官方文档


推荐阅读