【发布时间】:2016-01-18 21:39:57
【问题描述】:
这是我的标签表,一个标签可以有多个帖子:
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) 现在,我已经正确配置了 fluent 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 值,这里出了什么问题,它之前工作正常,但现在它在这里给我一些建议。
【问题讨论】:
标签: asp.net-mvc entity-framework ef-fluent-api