2016-01-18 47 views
0

這是我的標籤表,一個標籤可以有多個帖子:插入數據,以多對多的連接表

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,帖子ID) 現在,我已經適當地與流暢API配置,數據插入到TagPost表是這樣的:

modelBuilder.Entity<Tag>() 
        .HasMany(p => p.Posts) 
        .WithMany(t => t.Tags) 
        .Map(m => 
          { 
           m.ToTable("TagPost"); 
           m.MapLeftKey("TagId"); 
           m.MapRightKey("PostId"); 
          }); 

,這是我的控制器將數據插入到後級這樣的,在這裏我得到選定的標籤,但在每個列表,在最後一行它給System.NullReferenceException.The代碼:

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值,這裏有什麼錯誤,它工作得很好,但現在它在這裏給予我建議。

回答

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>(); 
    } 

} 

你應該做同樣在具有集合導航屬性的所有實體。

+0

thnks它的工作,但現在,新的問題,你可以在編輯的控制器中看到,TagName仍然返回null,可能是與加載/延遲加載有關的事情。 plzz看,它應該返回所有的標籤名稱,但空引用異常 – neo

+0

我不這樣。標量屬性不會延遲加載。當你加載一個實體時,所有的都被加載,也許它沒有正確保存(如果是這種情況),或者你不應該有該列的值 – octavioccl

+0

在數據庫中正確保存我已經檢查兩次讓我再次檢查它 – neo

相關問題