Sam*_*der 5 entity-framework entity-framework-6
我有一个简单的模型,当我在调试器中运行网站时,实体框架没有正确填充模型.
模型很简单:
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; }
}
Run Code Online (Sandbox Code Playgroud)
ApplicationUser
ASP MVC 5成员资格基础结构生成的默认类在哪里.
当我运行我的测试(Specflow)时,它为每个测试创建一个具有唯一ID的新LocalDb数据库并在该数据库上运行迁移,然后实体框架正确填充我的团队和所有者.
但是,当我运行网站并尝试与应用程序进行交互时,我的团队没有完全填充,因为所有者是null
和Members
不填充的.但是在数据库中正确设置了所有者ID,并且查询似乎没问题.在测试期间执行的查询和应用程序的运行看起来是一样的.
为什么会这样,我怎么开始调试这个问题?
我觉得我错过了一些简单的事情.
Ste*_*eve 11
您可能需要添加.Include()
到您的查询中,问题中没有显示,但应该看起来像这样:
var query = context.Teams.Include(x => x.Owner).Include(x => x.Members).Where( ... );
Run Code Online (Sandbox Code Playgroud)
EF只会加载顶级实体,但不会加载它所引用的实体(延迟加载).如果您尚未处理上下文,只需尝试访问这些导航属性就会导致它们从数据库加载,但如果上下文已被处理,则不会发生这种情况.
.Include()
将告知EF这些导航属性需要与引用实体一起急切加载.
有关延迟/急切加载以及如何控制它的更多详细信息,请参阅此MSDN页面.
归档时间: |
|
查看次数: |
7104 次 |
最近记录: |