entity-framework - 属性 'Id'是对象关键信息的一部分,不可修改

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

我有一个正在编写的示例 Web 应用程序,我很困惑为什么我会得到这个

属性'Id'是对象关键信息的一部分,不能修改。

当我不更新“Id”时?

好的,这就是我正在尝试做的事情。

我有 2 个表 Topics 和 Posts 以及 --

  1. 用户创建了一个新主题,它应该在数据库中添加一条主题记录
  2. 获取主题 ID 并将该 ID 设置为帖子的 TopicId
  3. 获取该帖子的 ID 并将其设置为主题的 LastPostId

我正在更新帖子,因此每当我需要显示针对该主题的最后一篇帖子时 我不需要对“该主题内的所有帖子按日期排序”。 应该有更好的方法来做到这一点..

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

谢谢!

最佳答案

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

例如:

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

我猜一个名为“ID”的属性也被提交到这个 Action 中,导致了这个错误。

关于entity-framework - 属性 'Id'是对象关键信息的一部分,不可修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5820285/

相关文章:

sql - 添加到LinQ-to-Entities更新的Where子句中

c# - 正确使用 Entity Framework 事务进行隔离

c# - 如何组织相互继承但又具有相互继承的属性的 C# 类?

c# - 如何从 Request.Form 获取所有元素值而不用 .GetValues ("ElementIdName"准确指定哪个元素值)

c# - ASP.NET MVC2 - 在加载用户控件时检查 IsPostBack 似乎不正确?

ajax - 使用带有下拉列表 mvc3 的 ajax

c# - Entity Framework 4 - 删除对象

asp.net - ASP.NET MVC2 应用程序中的 HTTP 错误 403.14

c# - 关于验证显示 2 个表单的页面的建议

asp.net-mvc - asp.net mvc3 razor 语法通过反射将模型转换为其子类