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

标签 entity-framework entity-framework-6

我有一个简单的模型,当我在调试器中运行网站时, 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/

相关文章:

sql - 由于 EF 不支持 DELETE SET NULL,我可以在 EF 之外运行 SQL 命令来执行此操作吗?

c# - .Net Framework 4.5 的升级应用程序 - 无法获得正确的 DataAnnotations 程序集

visual-studio-2010 - 具有继承、条件和外键的 Entity Framework

c# - Entity Framework 延迟加载 AsNoTracking()

c# - 影响如何在 EF 6 代码优先中从数据库创建实体类

c# - 具有 Active 标志的流畅映射和关系表

entity-framework - EF6.0 “The relationship could not be changed because one or more of the foreign-key properties is non-nullable”

sql-server - 查询在 SQL 中运行时间不到一毫秒,但在 Entity Framework 中超时

c# - EF Code First from Database - 已经是数据库中的一个对象

c# - 在应用程序文件中找不到名为 "...Entities"的连接字符串,但它存在吗?