【问题标题】:System.invalidOperationException While trying to update a specific recordSystem.invalidOperationException 尝试更新特定记录时
【发布时间】:2022-01-27 18:51:07
【问题描述】:

我在尝试更新特定记录时遇到实体框架问题 错误消息显示“属性 'ID' 是对象密钥信息的一部分,无法修改”。 我的表有一个主键,我没有尝试更新 Id。 这是方法

public void SetAsDefaultImage()
    {
       
       
        int id = Convert.ToInt32(Request.QueryString["id"].ToString());
        int pid = (int)TempData["ImgProductId"];
      
        Images defaultImage = Context.Connection.Images.FirstOrDefault(x => x.Default == true && x.ProductID==pid);
        defaultImage.Default = false;
        UpdateModel(defaultImage);
       int result=Context.Connection.SaveChanges();
        if (result > 0)
        {
            Images setdefault = Context.Connection.Images.First(x => x.Id == id);
            setdefault.Default = true;

             UpdateModel(setdefault);

             Context.Connection.SaveChanges();
        }
       
    }

你知道什么可能导致这个错误吗?

【问题讨论】:

  • 你在哪一行得到错误?您确定在该 UpdateModel 中您没有触摸 ID?
  • 你必须发布UpdateModel代码
  • 在 int result=Context.connection.savechanges () 上,我确定我没有触及 Id。我只是想将默认值更新为 false
  • 除了 updatemodel 是一个 mvc 方法。我没有编码。
  • 我对 mvc 很陌生,所以我不知道 updatemodel 导致了这个问题。谢谢。

标签: c# asp.net-mvc model-view-controller runtime-error


【解决方案1】:

问题是调用MVC方法UpdateModel引起的

据我了解,通常不需要 UpdateModel。当您不将模型传递给控制器​​并希望自己创建模型实例并希望使用控制器 IValueProvider 填充它时,它会派上用场。

您调用的重载将尝试从 Controller IValueProvider 填充每个属性,这可能会更新 ID 属性。 UpdateModel 的其他重载更有意义,例如允许您指定要更新的属性列表的重载。

最后,您只需删除对 UpdateModel 的两个调用,代码就会按预期工作。这篇博客文章可以检索到其他一些信息。

UpdateModel and TryUpdateModel in ASP.NET MVC

【讨论】:

    【解决方案2】:

    既然要更改两条记录,最好使用这段代码

    var  defaultImage = Context.Connection.Images.FirstOrDefault(x => x.Default == true && x.ProductID==pid);
    defaultImage.Default = false;
                  
    var setdefault = Context.Connection.Images.First(x => x.Id == id);
    setdefault.Default = true;
    
    Context.Connection.SaveChanges();
    

    【讨论】:

    • 感谢您的建议。
    • @Asdf 欢迎您!如果有用,请不要忘记接受答案。您可以通过单击我的答案旁边的复选标记来完成。
    猜你喜欢
    • 2015-04-24
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多