从EF中删除复杂的对象图

时间:2016-06-22 13:24:59

标签: c# entity-framework

我正在尝试从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();

但是在附加部分说明附加失败失败了,因为相同类型的另一个实体已经具有相同的主键值。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

如果您已经使用相同的上下文从数据库中检索了您的实体,那么为什么不简单地使用

_context.MyObject.Remove(entity);

实体必须来自与您要删除的实例相同的上下文实例(除非您要附加/分离)。

或者执行以下操作:

_context.MyObject.Remove(_context.MyObject.Find(id));
_context.SaveChanges();

此外,虽然这不是您的问题所在,但您需要管理存在数据库约束的级联删除。除非您将数据库设置为管理这些级联删除。

答案 1 :(得分:0)

我最终使用了GraphDiff。它运作良好。