【问题标题】:No nested results in Entity Framework Core [duplicate]Entity Framework Core 中没有嵌套结果 [重复]
【发布时间】:2017-07-24 14:38:29
【问题描述】:

我在带有 EF 的 C# 中有一个奇怪的行为 这是一个带有 EF Core 1.1.0 的 .NET Core 项目

"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",

我创建了两个模型,“用户”和“组”

 public class User
 {
    public int Id { get; set; }
    public string name { get; set; }
    public string lastName { get; set; }

    public List<Group> Groups { get; set; }
 }

 public class Group
 {
    public int Id { get; set; }
    public string groupName { get; set; }
    public virtual User User { get; set; }
 }

结果应该给我一个用户和他的组列表。

现在奇怪的部分:

结果从数据库返回,我查看了所有用户,组为空

我查看上下文以查看组

组已满:

现在我再次查看 allUser Result 并神奇地 Group 填充在每个 User 项中。

组在用户内部填充:

非常感谢任何帮助!

【问题讨论】:

    标签: c# sql-server asp.net-core .net-core entity-framework-core


    【解决方案1】:

    看起来您正在延迟加载实体。

    您可以使用 .Include 预先加载它们。

     var allUsers = context.Users.Include(user => user.Groups).ToList();
    

    此方法加载第一个实体(用户)以及相关实体作为查询(组)的一部分。

    【讨论】:

    【解决方案2】:

    在您不触发之前,DbContext 不会从数据库中下载实体,这并不神奇。当您在调试中单击context.Groups Results View 时,DbContext 会从数据库中获取所有组,以便之后它可以关联到用户。

    我认为您正在搜索 Include 方法,您可以在这样的查询中获取具有关联组的用户:

    var allUsers = context.Users.Include(u => u.Groups).ToList();
    

    【讨论】:

      【解决方案3】:

      这种行为来自加载实体的懒惰。

      默认情况下,您必须手动加载每个子实体。它被称为急切加载。

      为了预先加载您的实体,您必须在每个导航属性上使用.Include() 方法。

      例如context.User.Include(x =&gt; x.Groups)

      Include 方法生成一个新的 SQL 语句来从数据库中检索您的组。

      然后您可以使用ToList() 方法强制执行您的查询。

      【讨论】:

        猜你喜欢
        • 2020-03-23
        • 2022-01-21
        • 2019-02-14
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 2020-06-30
        • 2016-11-08
        相关资源
        最近更新 更多