实体框架:导航属性-代码优先

本文关键字:代码 属性 框架 导航 实体 | 更新日期: 2023-09-27 18:21:38

伙计,我今天花了很多时间试图让它发挥作用。我想我遗漏了一些导航属性。

我的控制器。当我在foo=5处放置断点,并查看本地监视窗口时,"listOfComments"没有任何元素,尽管我的数据库中列出了

public ActionResult CommentsList()
    {
        var post = _db.GetPost(5);
        List<Comment> listOfComments = post.Comments.ToList();
        var foo = 5;
        return View(post);
    }

GetPost方法

public Post GetPost(int? postId)
    {
        var context = DataContext;
        var post = context.Posts.FirstOrDefault(x => x.Id == postId);
        if (post == null)
        {
            return new Post();
        }
        return post;

    }

注释类

public class Comment
{
    public int Id { get; set; }
    [Required]
    public DateTime Date { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Email { get; set; }
    [Required]
    public string Body { get; set; }
    //Navigational
    public Post Post { get; set; }
}

后级

public class Post
{
    public Post()
    {
        Comments = new HashSet<Comment>();
        Tags = new HashSet<Tag>();
    }
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public DateTime Date { get; set; }
    [Required]
    public string Body { get; set; }
    //Navigational
    public ICollection<Comment> Comments { get; set; }
    public ICollection<Tag> Tags { get; set; }
}

我的DbContext类

public class HundredBlog: DbContext
{
    public HundredBlog() : base("HundredBlog") { }
    public DbSet<Post> Posts { get; set; }
    public DbSet<Comment> Comments { get; set; }
    public DbSet<Administrator> Administrators { get; set; }
    public DbSet<Tag> Tags { get; set; }

}

数据库表"注释"包含以下列:

-Id
-Date
-Name
-Email
-Body
-Post_Id

数据库表"Posts"包含以下列:

-Id
-Title
-Date
-Body

举个例子,我的数据库很好地填充了Comments列,它添加了引用主键的正确Post_Id。我对Tag表也有同样的问题,但它甚至有自己的参考表:

数据库表"TagPosts"包含以下列:

-TagId
-PostId

迷路了,请帮帮我!

实体框架:导航属性-代码优先

Post类中的Comments集合应该是虚拟的,如果您想启用延迟加载,或者您应该使用Include(p => p.Comments)来加载原始查询的数据。一般来说,第二种选择更好。