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

これは 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 を使用)。

私は何を間違っていますか?

4

2 に答える 2

3

あなたはそれを述べていませんが、Entity Frameworkを使用しているようです。

だとしたら犯人は多分この行

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

セッションに保存した「ユーザー」は Entity Framework から切断されたため、EF はそれを新しいユーザーと見なします。

これを解決するにはいくつかの方法があります。私が好むのは、 UserId プロパティを Post クラスに追加して、それを使用することです

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

次に、次のようにします。

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

Entity Framework は規則を使用して、そのユーザーをその投稿にリンクする必要があることを理解します。

于 2013-02-09T00:07:27.763 に答える
0

したがって、「ユーザーも複製する」と言うと、db.SaveChangesの後にDBでユーザータイプが複製されるという意味であると結論付けます。

私の推測として、Session["Usser"] に保存されているユーザーには既存の UserID プロパティ セットがなく、AND/OR EF モデルには Post to User 多重度関連付けセットがないと推測します。通常、私は Post に UserId プロパティが表示されることを期待しますが、上記のサンプルではこれが表示されません。

モデルをチェックして、User と Post の間に関連付けが設定されていること、および Post を User にリンクする外部キー プロパティがあることを確認します。Post オブジェクトには、UserId を参照する外部キーが必要です。

Microsoft のこの例のステップ 5 を見てください。

于 2013-02-09T00:18:21.580 に答える