【发布时间】:2018-03-30 14:16:44
【问题描述】:
在我继续之前,我已经阅读了所有同名主题,但无法解决我的问题,所以我不得不再次询问。
我有这样的模型:
class a {
int id;
class b b;
list of class c c;
string status
}
class b {
int id; //some other stuff
}
class c {
int id; //some other stuff
}
所以我想做的是从数据库中加载 a 类的对象(按 id (pk) 过滤) 然后更新字符串状态(保持相关实体不变) 并保存到数据库。 更改 a 类的一些字符串字段后 并调用 context.savechanges() 结果我得到的是(a类)数据库中的重复行,具有正确的值但不同的ID。 所以我想我需要告诉 ef 条目的状态已更改为“EntityState.Modified” 这样做后,我的问题标题出现异常。
这很重要我在尝试保存之前检查了 c 类的调试模式实例确实具有主键值,并且 db 确实具有具有相同 pk 值的行,所以我没有尝试更新不存在的行
context.orders.Add(current);
context.Entry(current).State = EntityState.Modified;
context.SaveChanges();
此代码在标题中引发异常 对象“当前”在保存之前有它的 pk 值
任何帮助将不胜感激
【问题讨论】:
-
我很确定您不需要
Add的第一行,实际上无法添加它,因为它已经有一个主键。您只需将其标记为已修改,然后保存更改。 -
我刚刚测试过了,你是对的。我现在为自己感到羞耻,多么简单的错误。无论如何谢谢你好先生
-
我无法将您的评论标记为答案,所以如果您将其发布为答案,我会标记它(再次感谢)
-
@giorgi 你确定这个实体是附加的吗?是否启用了公共和虚拟属性或更改跟踪?当您的实体未附加或您忽略主键时,这很常见。
-
在这种情况下,加载/更新是由相同的上下文完成的,因此它知道对象的状态
标签: c# entity-framework