1

更新我在我的數據庫我的實體模型三個表:數據沒有實體框架

Models

我可以添加類別不是一個後更多。所以桌子很多很多。

我可以添加一個新的帖子與多個類別。沒有問題。

CreatePost行動:

[HttpPost] 
    public ActionResult CreatePost(Post post, int[] categories) 
    { 
     post.CreatedDate = DateTime.Now; 
     foreach (var category in categories) 
     { 
      post.Categories.Add(db.Categories.Find(category)); 
     } 
     db.Posts.Add(post); 
     db.SaveChanges(); 
     // Get categories from ListBox 
     ViewData["Categories"] = new MultiSelectList(db.Categories.Select(c => new CategoryViewModel() 
     { 
      CategoryId = c.CategoryId, 
      CategoryName = c.Name 
     }), "CategoryId", "CategoryName"); 
     return View(post); 
    } 

但我不能從更新後的類別。我無法獲得錯誤,但它不起作用。

EditPost:當我編輯過賬不更新

[HttpPost, ActionName("EditPost"), ValidateInput(false)] 
    public ActionResult EditPost(Post post, int[] categories) 
    { 
     ViewData["Categories"] = new MultiSelectList(db.Categories.Select(c => new CategoryViewModel() 
     { 
      CategoryId = c.CategoryId, 
      CategoryName = c.Name 
     }), "CategoryId", "CategoryName"); 

     post.CreatedDate = DateTime.Now; 
     // Clear all categories. 
     post.Categories.Clear(); 
     foreach (var category in categories) 
     { 
      // Add new categories. 
      post.Categories.Add(db.Categories.Find(category)); 
     } 
     db.Entry(post).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Posts"); 
    } 

分類。我沒有得到任何錯誤。我怎樣才能做到這一點?請幫助..

回答

1

的原因是post.Categories必須加載之前EF可以跟蹤更改。

db.Entry(post).State = EntityState.Modified; // Also attaches post to the context 
db.Entry(post).Collection(p => p.Categories).Load(); 

// Clear all categories. 
post.Categories.Clear(); 
// and so on 

順便問一下,你確定post.CreatedDate = DateTime.Now;而帖子更新,而不是創建?

+0

非常感謝!這是作品..我改變到CreateDate .. – mstfcck

0

可能的原因是什麼都沒有保存,SaveChanges沒有找到任何保存更改。因此,它什麼都不做,並且沒有錯誤消息。

嘗試在添加類別之前將帖子附加到上下文。或設置在類別狀態:

foreach (var cat in post.Categories) 

    this.Entry(cat).State = EntityState.Modified; 
+0

但是,類別不同(在int []類別中)。它不工作! – mstfcck