2013-02-09 75 views
1

我想使用MVC做一個簡單的論壇,我無法弄清楚爲什麼發佈回覆的用戶得到重複。用戶被複制時調用回覆

這裏是回覆操作:

[HttpPost] 
public ActionResult Reply(string Title, string Content,int ReplyTo) 
{ 
    Post masterPost = db.Posts.FirstOrDefault(p => p.PostID == ReplyTo); 
    Post post = new Post(); 
    post.PostID = 0; 
    post.CreatedOn = DateTime.Now; 
    post.ModifiedOn = DateTime.Now; 
    post.ReplyTo = masterPost; 
    post.Forum = db.Forums.FirstOrDefault(f=>f.ForumID == masterPost.Forum.ForumID); 
    post.User = (User)Session["User"]; 
    post.Title = Title; 
    post.Content = Content; 

    //if (ModelState.IsValid) 
    //{ 
     db.Posts.Add(post); 
     db.SaveChanges(); 
     return RedirectToAction("View", "Posts", new { id = ReplyTo }); 
    //} 
    return View(post); 
} 

這是郵政的實體:

public class Post 
{ 
    [Key] 
    public int PostID { get; set; } 
    public string Title { get; set; } 
    [DataType(DataType.MultilineText)] 
    public string Content { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public DateTime? ModifiedOn { get; set; } 
    public virtual Forum Forum { get; set; } 
    public virtual User User { get; set; } 
    public virtual Post ReplyTo { get; set; } 
} 

這是用戶實體:

public class User 
{ 
    public int UserID { get; set; } 
    public string Name { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 
    public DateTime RegisteredOn { get; set; } 
} 

每當的ReplyTo行動把它叫做創建帖子,但它也複製存儲在會話中的用戶(使用不同的用戶ID)。

我在做什麼錯?

回答

3

即使您沒有聲明它,它看起來像你使用實體框架。

如果是這樣,罪魁禍首可能是此行

post.User = (User)Session["User"]; 

「用戶」您的會話存儲正在從實體框架斷開,所以EF假定它是一個全新的用戶。

有幾種方法可以解決這個問題。一個我喜歡的也一個用戶ID屬性添加到郵政類和使用

public class Post 
{ 
    // Stuff 
    public virtual int UserId { get; set; } 
} 

然後做:

post.UserId = ((User)Session["User"]).Id; 

實體框架使用慣例來理解你想要的是用戶鏈接到該帖子。

+0

是的。這正是我所尋找的解決方案。非常感謝! – 2013-02-09 01:21:52

0

所以當你說「它也複製了用戶」時,我得出結論,你的意思是你在db.SaveChanges之後在DB中獲得一個重複的用戶類型。

根據我的推測,那麼我會推測存儲在Session [「Usser」]中的用戶沒有現有的UserID屬性集,並且/或者您的EF模型沒有Post to User多重性關聯集。通常,我期望在Post中看到UserId屬性,並且上面的示例不顯示此內容。

檢查您的模型以確保您具有User和Post之間的關聯集,並且存在將Post與User關聯的外鍵屬性。 Post對象需要一個引用UserId的外鍵。

以微軟的這個例子中的look at Step 5爲例。