我正在尝试从EF删除对象图,但我尝试的所有内容都会抛出错误:
var dbSet = _context.Set(typeof (MyObject));
dbSet.Remove(entity);
_context.SaveChanges();
当我这样做时,它说我的对象在ObjectManager中不存在。
然后我读到我需要先附加它。所以我试试这个:
var dbSet = _context.Set(typeof (MyObject));
dbSet.Attach(entity);
dbSet.Remove(entity);
_context.SaveChanges();
但是在附加部分说明附加失败失败了,因为相同类型的另一个实体已经具有相同的主键值。
我在这里缺少什么?
答案 0 :(得分:1)
如果您已经使用相同的上下文从数据库中检索了您的实体,那么为什么不简单地使用
_context.MyObject.Remove(entity);
实体必须来自与您要删除的实例相同的上下文实例(除非您要附加/分离)。
或者执行以下操作:
_context.MyObject.Remove(_context.MyObject.Find(id));
_context.SaveChanges();
此外,虽然这不是您的问题所在,但您需要管理存在数据库约束的级联删除。除非您将数据库设置为管理这些级联删除。
答案 1 :(得分:0)
我最终使用了GraphDiff。它运作良好。