MVC4代码优先-IList未填充数据/视图中出现NullPointer异常

本文关键字:视图 异常 NullPointer 数据 代码 -IList 填充 MVC4 | 更新日期: 2023-09-27 18:21:52

我试图用MVC4写一个博客,但在Post - Comment (1 to n)Post - Tag (n to m)关系方面存在问题,首先使用代码。

标签:

public class Tag
{
    [Key]
    [Required]
    public int ID { get; set; }
    [Required]
    public string Name { get; set; }
    public IList<Post> Posts { get; set; }
}

评论:

public class Comment
{
    [Key]
    [Required]
    public int ID { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public DateTime DateTime { get; set; }
    [Required]
    [DataType(DataType.MultilineText)]
    public string Body { get; set; }
}

职位:

public class Post
{
    [Key]
    [Required]
    public int ID { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public DateTime DateTime { get; set; }
    [Required]
    [DataType(DataType.MultilineText)]
    public string Body { get; set; }
    public IList<Tag> Tags { get; set; }
    public IList<Comment> Comments { get; set; }
}

首先使用这段代码,我得到了一个数据库,它看起来像:

Comment n to 1 Post n to m Tag

其中,对于n to 1Post的外键在Comment中,并且对于n to m,创建了交叉表。

现在,我创建了ControllerView,以使用Tags创建新的Post

当我查看数据库时,所有内容都填写正确。存在PostTags,并且交叉表中填充有IDs

但现在,当我想在View中渲染Post时,我想用@post.Tags获得数据,其中@post表示我当前选择的Post,它具有正确的数据(Title, Name etc),但对于Tags,它是我的Model中的IList<Tag>,我得到了NullPointer Exception。(@post.Comments也是如此)

尽管,在创建Post:时

new Post() { ID = -1, Tags=new List<Tag>(), Comments=new List<Comment>(), DateTime = DateTime.Now };  

编辑:
当使用virtual时,我得到一个System.Data.EntityCommandExecutionException。已经有一个打开的DataReader与此命令关联,必须首先关闭

解决方案我缺少virtual关键字,也没有调用Include方法。为了获得方法,我必须使用System.Data.Entity

现在它工作了,谢谢你们两个

MVC4代码优先-IList未填充数据/视图中出现NullPointer异常

您可能需要将Post类的TagsComments属性设置为virtual,以便对它们进行延迟加载。

public virtual IList<Tag> Tags { get; set; }
public virtual IList<Comment> Comments { get; set; }