gpt4 book ai didi

entity-framework - Entity Framework 子对象未填充

转载 作者:行者123 更新时间:2023-12-04 17:09:50 26 4
gpt4 key购买 nike

我有一个简单的模型,当我在调试器中运行网站时, Entity Framework 没有正确填充模型。

模型很简单:

public class Team
{
/// <summary>
/// Constructor required for the EntityFramework to create the object.
/// </summary>
private Team()
{
}

public Team(string name, ApplicationUser owner)
{
Name = name;
Owner = owner;
}

[Required]
public int Id { get; private set; }

[Required]
public string Name { get; private set; }

[Required]
public ApplicationUser Owner { get; private set; }

[Required]
public List<TeamMembership> Members { get; set; }
}


public class TeamMembership
{
/// <summary>
/// Constructor for the EntityFramework
/// </summary>
private TeamMembership()
{
}

public TeamMembership(ApplicationUser user, MembershipStatus status)
{
User = user;
Status = status;
}

[Required]
public ApplicationUser User { get; private set; }

[Required]
public MembershipStatus Status { get; set; }

[Required]
public int Id { get; private set; }
}

哪里 ApplicationUser是由 ASP MVC 5 成员资格基础结构生成的默认类。

当我运行我的测试 (Specflow) 时,它会为每个测试创建一个具有唯一 ID 的新 LocalDb 数据库并在该数据库上运行迁移,然后 Entity Framework 会正确填充我的团队和所有者。

但是,当我运行网站并尝试与应用程序交互时,我的团队并未完全填充,因为所有者是 nullMembers没有人口。但是所有者 ID 在数据库中设置正确,查询似乎没问题。测试期间执行的查询和应用程序的运行似乎相同。

为什么会这样,我该如何开始调试问题?

我觉得我错过了一些简单的东西。

最佳答案

您可能需要添加 .Include()到您的查询,该查询未显示在您的问题中,但应如下所示:

var query = context.Teams.Include(x => x.Owner).Include(x => x.Members).Where( ... );

EF 只会加载顶级实体,但不会加载它引用的实体,直到需要它们(延迟加载)。如果您还没有处理上下文,那么简单地尝试访问这些导航属性应该会导致它们从数据库加载,但如果上下文已被处理,则不会发生这种情况。
.Include()将通知 EF 这些导航属性需要与引用实体一起急切加载。

this MSDN page有关延迟/急切加载以及如何控制它的更多详细信息。

关于entity-framework - Entity Framework 子对象未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com