首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用Reply时用户重复

调用Reply时用户重复
EN

Stack Overflow用户
提问于 2013-02-09 08:04:22
回答 2查看 41关注 0票数 1

我正在尝试使用MVC创建一个简单的论坛,但我不明白为什么发布回复的用户会被复制。

回复操作如下:

代码语言:javascript
复制
[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实体:

代码语言:javascript
复制
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; }
}

这是用户实体:

代码语言:javascript
复制
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操作,它都会创建帖子,但它也会复制存储在会话中的用户(使用不同的UserID)。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-09 08:07:28

即使您没有声明它,但看起来您使用的是实体框架。

如果是这样,罪魁祸首可能是下面这行

代码语言:javascript
复制
post.User = (User)Session["User"];

您存储在会话中的“用户”现在与实体框架断开连接,因此EF假设它是一个全新的用户。

有几种方法可以解决这个问题。我更喜欢的一种方法是在您的Post类中添加一个UserId属性,并使用该属性

代码语言:javascript
复制
public class Post
{
    // Stuff
    public virtual int UserId { get; set; }
}

然后执行以下操作:

代码语言:javascript
复制
post.UserId = ((User)Session["User"]).Id;

实体框架使用一种约定来理解您想要将该用户链接到该帖子。

票数 3
EN

Stack Overflow用户

发布于 2013-02-09 08:18:22

因此,当您说“它也复制了用户”时,我得出的结论是,您的意思是在db.SaveChanges之后在数据库中获得重复的用户类型。

根据我的假设,我会推测存储在会话“Usser”中的用户没有现有的UserID属性集,并且/或者您的EF模型没有设置Post到用户的多重性关联。通常,我希望在帖子中看到UserId属性,而您上面的示例没有显示这一点。

检查您的模型,确保您在User和Post之间设置了关联,并且存在将Post链接到User的外键属性。Post对象需要引用UserId的外键。

在本例中,以微软的look at Step 5为例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14783339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档