C# 实体框架6未加载导航属性(延迟加载)
我正在尝试加载以下数据库结构 用户->用户团队关系->团队->游戏 在这个关系中,“Team”在尝试访问时已经为null “用户。团队。团队” 我有以下数据库结构C# 实体框架6未加载导航属性(延迟加载),c#,asp.net,.net,asp.net-mvc,entity-framework-6,C#,Asp.net,.net,Asp.net Mvc,Entity Framework 6,我正在尝试加载以下数据库结构 用户->用户团队关系->团队->游戏 在这个关系中,“Team”在尝试访问时已经为null “用户。团队。团队” 我有以下数据库结构 public class User : IdentityUser { public User() { this.Id = Guid.NewGuid().ToString(); } public virtual ICollection<TeamMember> Teams {
public class User : IdentityUser
{
public User()
{
this.Id = Guid.NewGuid().ToString();
}
public virtual ICollection<TeamMember> Teams { get; set; }
}
public class Team
{
public Team()
{
this.Id = Guid.NewGuid().ToString();
}
[Key]
public string Id { get; set; }
public virtual ICollection<TeamMember> Memberinos { get; set; }
[Required]
public virtual Game Game { get; set; }
}
public class TeamMember
{
public TeamMember()
{
this.Id = Guid.NewGuid().ToString();
}
[Key]
public string Id { get; set; }
public virtual Team Team { get; set; }
public virtual User Member { get; set; }
}
public class Game
{
public Game()
{
this.Id = Guid.NewGuid().ToString();
}
[Key]
public string Id { get; set; }
public string Name { get; set; }
}
公共类用户:IdentityUser
{
公共用户()
{
this.Id=Guid.NewGuid().ToString();
}
公共虚拟ICollection团队{get;set;}
}
公开课小组
{
公共团队()
{
this.Id=Guid.NewGuid().ToString();
}
[关键]
公共字符串Id{get;set;}
公共虚拟ICollection成员{get;set;}
[必需]
公共虚拟游戏{get;set;}
}
公开课小组成员
{
公共团队成员()
{
this.Id=Guid.NewGuid().ToString();
}
[关键]
公共字符串Id{get;set;}
公共虚拟团队{get;set;}
公共虚拟用户成员{get;set;}
}
公开课游戏
{
公共游戏()
{
this.Id=Guid.NewGuid().ToString();
}
[关键]
公共字符串Id{get;set;}
公共字符串名称{get;set;}
}
我尝试了以下代码
using (var db = new ApplicationDbContext())
{
var user = db.Users.FirstOrDefault(x => x.UserName.ToLower().Equals(username));
if (user == null)
{
return new ResponseViewModel(false, "User nicht gefunden", null);
}
var teams = new List<Team>();
foreach (var team in user.Teams)
{
teams.Add(new Team()
{
Description = team.Description,
TeamName = team.Team.TeamName,
GameName = team.Team.Game.Name
});
}
}
使用(var db=new ApplicationDbContext())
{
var user=db.Users.FirstOrDefault(x=>x.UserName.ToLower().Equals(UserName));
if(user==null)
{
返回新的ResponseViewModel(false,“用户nicht gefunden”,null);
}
var teams=新列表();
foreach(user.Teams中的var团队)
{
teams.Add(新团队()
{
Description=团队。Description,
TeamName=team.team.TeamName,
GameName=team.team.Game.Name
});
}
}
它到达foreach循环并找到“Description”属性。但是当我尝试访问团队模型时,它是空的
有什么建议吗?团队成员模型类中应该有一个外键:
public class TeamMember
{
public TeamMember()
{
this.Id = Guid.NewGuid().ToString();
}
[Key]
public string Id { get; set; }
[Required]
public string TeamId { get; set; }
[ForeignKey("TeamId")]
public virtual Team Team { get; set; }
[Required]
public string UserId { get; set; }
[ForeignKey("UserId")]
public virtual User Member { get; set; }
}
好的。经过一些研究,我发现,由于数据不一致/数据库损坏,团队实体不存在 谢谢你的帮助
带有“.Include”(“Teams.Team.Game”)”的解决方案也起到了作用尝试
db.Users.Include(“Teams.Team.Game”)
以便也加载这些属性。还有lambda方式,即db.Users.Include(x=>x.Teams)代码>谢谢,但这不太管用:/我们在这里看到所有代码了吗?实际上,构造函数中是否有更多的初始化?不,这不是必需的。EF应该能够做到没有。