属性“Id”是对象的关键信息的一部分,无法修改

时间:2011-04-28 14:34:07

标签: entity-framework asp.net-mvc-2 asp.net-mvc-3 entity-framework-4

我有一个示例网络应用程序,我正在写,我很困惑为什么我得到这个

属性“Id”是对象关键信息的一部分,无法修改。

当我没有更新'Id'时?

好的,所以这就是我想要做的。

我有2个表主题和帖子 -

  1. 用户创建一个应在数据库中添加主题记录的新主题
  2. 获取主题ID并将该ID设置为Post的TopicId
  3. 获取该帖子的ID并将其设置为Topic的LastPostId
  4. 我正在更新帖子,以便每当我需要显示对该主题所做的最后一篇帖子时 我不需要对“此主题中的所有帖子按日期排序”。 应该有更好的方法来做到这一点..

    当我调试时,我看到了 主题类别Id被设置为主题ID 我在更新代码中没有。

    //
            // insert new topic to database
    
            Topic topic = new Topic();
    
            topic.CategoryId = int.Parse(RouteData.Values["id"].ToString());
            topic.Title = postModel.Title;
    
            topicRepo.Add( topic );
            topicRepo.Save();
    
            //
            // insert post to database
            PostRepository postRepo = new PostRepository();
            Post post = new Post();
    
            post.TopicId = topic.Id;
            post.Body = postModel.Body;
    
            string strUserId = UserAccount.FormatUserName( User.Identity.Name );
    
            post.CreatedByUser = strUserId;
            post.CreationDate = DateTime.Now;
    
            postRepo.Add( post );
            postRepo.Save();
    
            // ***********************
            // update topic last post
            // ***********************
            Topic updateTopic = topicRepo.GetTopic( topic.Id );
            updateTopic.LastPostId = post.Id;
    
            TryUpdateModel( updateTopic );
            if ( ModelState.IsValid ) 
                topicRepo.Save();
    

    谢谢!

1 个答案:

答案 0 :(得分:3)

这是因为TryUpdateModel尝试更新所有发布的值。因此,如果您有一个或多个不想更新的值,则必须手动执行此操作。

例如:

TryUpdateModel(updateTopic,  "", null, new string[] { "Id" });

我猜测名为“ID”的一个属性也会提交到此操作中,从而导致错误。