3

我有我写一个简单的Web应用程序,为什么我得到即时困惑这个属性“ID”是对象的关键信息的一部分,不能被修改

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

当我不更新'Id'?

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

我有2个表主题和邮电 -

  1. 用户创建一个新的话题,应该在数据库
  2. 上添加主题记录获取主题ID,并设置标识,以邮政的TopicId
  3. 获得该职位的ID,并将其设置为主题的LastPostId

我重新更新的帖子所以每当我需要显示的话题 我不需要牛逼所做的最后一个职位o按照该主题中的所有帖子排序“。 应该有更好的方式来做到这一点..

当我调试我看到 主题类别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(); 

谢谢!

+0

异常在哪里发生?我猜它是在postRepo.Save()或topicRepo.Save()中。我们可能需要查看更多代码。 – 2011-04-28 14:40:07

+0

它发生在TryUpdateModel(updateTopic)中。我看到EF将Id(14)设置为8(categoryId),这很奇怪。 – 2011-04-28 14:58:23

+0

你可以发布postModel和Topic类吗? – 2011-04-28 15:08:37

回答

3

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

例如:

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

我猜测,名为“ID”一个属性也提交到这个动作,导致错误。

+0

谢谢!它像一个魅力! – 2011-04-28 15:52:13

+0

但是,如果修改的ID是模型属性的ID属性,并且我想修改引用属性为具有所述ID的那个?示例: class A {int ID; B道具;} class B {int ID; } 我想保存一个对象引用id = 2的对象B而不是id = 1的对象???我想改变a.b.ID ... – billy 2011-11-11 15:12:46

+0

嗯,我实际上不得不看代码。但从我的头顶我认为你可以这样做:TryUpdateModel(updateTopic,“”,null,new string [] {“B.Id”}); – Francisco 2011-12-16 14:35:33

相关问题