在我继续之前,我已经阅读了所有相同名称的主题,并且无法解决我的问题所以我必须再次提问。
我有这样的模特: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值
任何帮助将不胜感激
答案 0 :(得分:0)
该实体已存在于数据库中,因此您无需致电Add
。这是导致它失败的原因 - 它已经存在,因此无法再次插入(这将破坏主键约束)。只需将其标记为已修改并保存更改,就足以在数据库中更新它:
context.Entry(current).State = EntityState.Modified;
context.SaveChanges();