System.invalidOperationException 尝试更新特定记录时

System.invalidOperationException While trying to update a specific record

我在尝试更新特定记录时遇到 Entity Framework 问题 错误消息说“属性 'ID' 是对象密钥信息的一部分,无法修改”。 我的 table 有一个主键,我没有尝试更新 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();
        }
       
    }

知道可能导致此错误的原因吗?

既然你要改变两条记录,最好使用这个代码

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();

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

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

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

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

UpdateModel and TryUpdateModel in ASP.NET MVC