加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 填充导航属性的导航属性

发布时间:2020-12-16 06:27:13 所属栏目:asp.Net 来源:网络整理
导读:如何使用特定值填充导航属性? 我有3个模型,Game,UserTeam,User,定义如下.我有一个使用IEnumerable模型的剃刀视图.此视图循环遍历游戏,并在该循环内循环用户团队.到现在为止还挺好. 在UserTeam循环中,我想访问用户属性,但它们是null.如何为每个UserTeam对象
如何使用特定值填充导航属性?

我有3个模型,Game,UserTeam,User,定义如下.我有一个使用IEnumerable模型的剃刀视图.此视图循环遍历游戏,并在该循环内循环用户团队.到现在为止还挺好.

在UserTeam循环中,我想访问用户属性,但它们是null.如何为每个UserTeam对象填充用户导航属性?我是否需要在UserTeam模型中使用带参数的构造函数?

楷模

public class Game
{
    public Game()
    {
        UserTeams = new HashSet<UserTeam>();
    }

    public int Id { get; set; }
    public int CreatorId { get; set; }
    public string Name { get; set; }
    public int CurrentOrderPosition { get; set; }

    public virtual UserProfile Creator { get; set; }
    public virtual ICollection<UserTeam> UserTeams { get; set; }
}


 public class UserTeam
{
    public UserTeam()
    {
        User = new UserProfile();
    }

    public int Id { get; set; }
    public int UserId { get; set; }
    public int GameId { get; set; }
    public int OrderPosition { get; set; }

    public virtual UserProfile User { get; set; }
    public virtual Game Game { get; set; }
    public virtual IList<UserTeam_Player> UserTeam_Players { get; set; }

}

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string test { get; set; }

    public UserProfile()
    {
        UserTeams = new HashSet<UserTeam>();
    }

    public virtual ICollection<UserTeam> UserTeams { get; set; }
    [ForeignKey("CreatorId")]
    public virtual ICollection<Game> Games { get; set; }
}

在我的Razor视图中循环(模型是IEnumerable)

@foreach (var item in Model) {
        @foreach (var userteam in item.UserTeams) {
                        @Html.ActionLink("Join game as"+userteam.User.UserName,"JoinGame",new { gameid = item.Id,userid=userteam.UserId })
        }
}

我的存储库中返回游戏的方法

public IEnumerable<Game> GetAllGames()
    {
        using (DataContext)
        {
            var gm = DataContext.Games.Include("UserTeams").ToList();
            return gm;
        }
    }

解决方法

您需要在存储库方法中包含它.如果你正在使用渴望加载,那就像是

var gm = DataContext.Games
                     .Include(x => x.UserTeams)
                     .Include(x => x.UserTeams.Select(y => y.User))
                     .ToList();

我没有使用LINQ作为我的查询,但我认为它将是这样的:

var gm = DataContext.Games.Include("UserTeams.User").ToList();

希望这会帮助你

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读