实体对象的虚拟列表为空,我该如何初始化它?

时间:2013-02-21 15:33:16

标签: c# entity-framework-5

我有两个实体BlogPostTag,我希望能够添加/检索与每个Tag相关联的BlogPost列表,还希望能够与BlogPost相关联的Tag列表。

从理论上讲,这应该没问题,因为会有一个表格BlogPostTags,它会将BlogPostIdTagId链接在一起。

我遇到的问题是,当我尝试将Tag添加到新BlogPost时,BlogPost.Tags属性为空。

如何初始化列表,甚至只是一个空列表,以便我可以将Tag添加到其中?

public class BlogPost
{
    public int BlogPostId { get; set; }
    public string BlogTitle { get; set; }
    public string BlogContent { get; set; }

    public virtual List<Tag> Tags { get; set; }
}

public class Tag
{
    public int TagId { get; set; }
    public string TagName { get; set; }

    public virtual List<BlogPost> BlogPosts { get; set; }
}

某处标签的创建方式如下:

Tag tag1 = context.Tags.Create();
tag1.TagName = "test1";
context.Tags.Add(tag1);
context.SaveChanges();

然后我希望能够将它们添加到新的BlogPost

BlogPost post = context.BlogPosts.Create();
post.BlogTitle = "Test post";
post.BlogContent = "this is a test blog and as such lorem bacon.";
post.DatePosted = DateTime.Now;
post.Tags.Add(tag1);
context.BlogPosts.Add(post);
context.SaveChanges();

但是post.Tags会抛出Object reference not set to an instance of an object

1 个答案:

答案 0 :(得分:3)

在构造函数

中初始化列表
public class BlogPost
{
    public int BlogPostId { get; set; }
    public string BlogTitle { get; set; }
    public string BlogContent { get; set; }

    public virtual List<Tag> Tags { get; set; }
    public BlogPost()
    {
        Tags = new List<Tag>();
    }
}

和其他类

相同
public class Tag
{
    public int TagId { get; set; }
    public string TagName { get; set; }

    public virtual List<BlogPost> BlogPosts { get; set; }

    public Tag()
    {
        BlogPosts = new List<BlogPost>();
    }
}