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 的两次调用,代码就会按预期工作。其他一些信息可以通过这篇博文检索。
我在尝试更新特定记录时遇到 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 的两次调用,代码就会按预期工作。其他一些信息可以通过这篇博文检索。