使用MVC中的外键值填充列表

时间:2017-04-11 13:17:16

标签: mysql asp.net-mvc asp.net-mvc-4

我正在使用MVC开发一个原型平台,用户可以在其中制作个人资料并使用该个人资料制作文本帖子,例如社交媒体网站。我的数据库中有以下两个表:

配置文件

 public partial class Profile
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Profile()
    {
        this.Posts = new HashSet<Post>();
    }

    public int Id { get; set; }
    public string UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Country_ { get; set; }
    public System.DateTime DoB { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Post> Posts { get; set; }
}

}

帖子

public partial class Post
{
    public int Id { get; set; }
    public string Text { get; set; }
    public System.DateTime DATE { get; set; }
    public int ProfileId { get; set; }

    public virtual Profile Profile { get; set; }
}

}

在我的ViewModel中,我有一个名为PostList的帖子列表,我希望用它填充用户所做的所有帖子记录。因此,我需要使用所有记录填充列表,其中Posts中的ProfileId等于Profile的Id,这取决于Profile中的UserId是否等于当前用户的Identity。

简而言之,我需要:

帖子列表=其中ProfileId = Profiles.Id其中Profiles.UserId = CurrentUserId的帖子。

有什么想法吗?我尝试了以下内容,但这是完全错误的:

        var userId = User.Identity.GetUserId();
        ViewModels.ProfileViewModel pVm = new ViewModels.ProfileViewModel();
        pVm.PostList = db.Posts.Include(db.Profiles).Where(a => a.UserId ==    userId).ToList();
        pVm.UserName = User.Identity.GetUserName();
        return View(pVm);

1 个答案:

答案 0 :(得分:0)

您只需在查询中查看关系:

pVm.PostList = db.Posts.Where(a => a.Profile.UserId == userId);

没有必要使用Include,因为Profile将自动加入以进行查询。