实体框架:存储更新,插入或删除语句影响了意外的行数(0)

时间:2018-03-30 00:23:46

标签: c# entity-framework

在我继续之前,我已经阅读了所有相同名称的主题,并且无法解决我的问题所以我必须再次提问。

我有这样的模特:

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值

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

该实体已存在于数据库中,因此您无需致电Add。这是导致它失败的原因 - 它已经存在,因此无法再次插入(这将破坏主键约束)。只需将其标记为已修改并保存更改,就足以在数据库中更新它:

context.Entry(current).State = EntityState.Modified;
context.SaveChanges();