【问题标题】:Entity Framework 6 not loading Navigation Properties (lazy Loading)实体框架 6 未加载导航属性(延迟加载)
【发布时间】:2017-03-18 03:07:11
【问题描述】:

我正在尝试加载以下数据库结构

用户 -> UserTeamRelation -> 团队 -> 游戏

在这种关系中,“团队”在尝试访问时已经为空 “user.Teams.Team”。

我有以下数据库结构

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; }
}

我尝试了以下代码

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
        });
    }
}

它到达 foreach 循环并找到“描述”属性。但是当我尝试访问团队模型时,它为空。

有什么建议吗?

【问题讨论】:

  • 尝试db.Users.Include("Teams.Team.Game"),以便同时加载这些属性。还有一种lambda方式是db.Users.Include(x=&gt; x.Teams).Include...
  • 谢谢你,但这也没有用:/
  • 我们在这里看到所有代码吗?实际上,构造函数中是否有更多的初始化?

标签: c# asp.net .net asp.net-mvc entity-framework-6


【解决方案1】:

TeamMember 模型类中应该有一个外键:

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; }
}

【讨论】:

  • 不,这不是必需的。 EF 应该可以不用。
【解决方案2】:

好的。经过一些研究,我发现,由于数据不一致/数据库损坏,团队实体并不存在。

感谢您的帮助。

".Include("Teams.Team.Game")" 的解决方案也成功了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多