这是我的标签表,一个标签可以有多个帖子:
public class Tag
{
public int TagId { get; set; }
public string TagName { get; set; }
public IList<Post> Posts { get; set; }
}
这是我的Post类,一个帖子可以有多个标签:
public class Post
{
[Key]
public int PostId { get; set; }
// other related code
public IList<Tag> Tags { get; set; }
}
这两个类在数据库中创建了一个新表TagPost,其中包含列(TagId,PostId) 现在,我已经正确配置了流畅的api,数据插入到TagPost表中,如下所示:
modelBuilder.Entity<Tag>()
.HasMany(p => p.Posts)
.WithMany(t => t.Tags)
.Map(m =>
{
m.ToTable("TagPost");
m.MapLeftKey("TagId");
m.MapRightKey("PostId");
});
这是我的控制器将数据插入到这样的post类中,这里我得到所选标签的列表,但是对于每一个,在最后一行它给出了System.NullReferenceException。代码是:
public JsonResult Post(Post post,IEnumerable<int> MultipleTags)
{
post.User = User.Identity.GetUserId<int>();
foreach (var tagId in MultipleTags)
{
var tag = new Tag { TagId = tagId };
// db.Tags.Attach(tag); // this avoids duplicate tags
post.Tags.Add(tag); // getting error here, system.nullReferenceException
}
db.Posts.Add(post);
db.SaveChanges();
var usr = db.Users.FirstOrDefault(x => x.Id == post.PostedBy);
var ret = new
{
TagName = string.Join(",", post.Tags.Select(t => t.TagName)),
};
return Json( ret,JsonRequestBehavior.AllowGet);
,当我悬停时,我可以看到标签包含正确的id值,这里有什么问题,它之前的工作正常,但现在它在这里给我一些建议。
答案 0 :(得分:2)
您需要在构造函数中初始化标记列表:
public class Post
{
[Key]
public int PostId { get; set; }
// other related code
public virtual IList<Tag> Tags { get; set; }
public Post()
{
Tags=new List<Tag>();
}
}
您应该在具有集合导航属性的所有实体中执行相同操作。