【问题标题】:c# Entity Framework Remove an added object from the Data Context before SaveChangesc#实体框架在SaveChanges之前从数据上下文中删除一个添加的对象
【发布时间】:2018-02-07 19:12:26
【问题描述】:

我正在尝试在调用 SaveChanges 之前从上下文中删除实体。

实体是这样添加的

DbContext.Set<T>().Add(new T());

最初我会通过将它们的状态设置为 EntityState.UnChanged 来删除单个项目,如果适用于我的覆盖 DbContext.SaveChanges() 方法。

但是当我有多个我不想保留的实体时,当第二个实体的状态更改为 UnChanged 时,我收到错误消息 - “保存或接受更改失败,因为多个实体具有相同的主键值” -显然它们的 ID 都是 0,因为它们还没有被保存。

当我尝试时

DbContext.Set<T>().Remove(entity);

它只是不会删除实体

我知道将 EntityState 设置为 UnChanged 是我多年前发现的一个小技巧,现在它又回来咬我了!

如果有人能告诉我如何在保存之前从 DbContext 中删除未保存的实体,我将不胜感激。

最好的问候

兰斯

【问题讨论】:

  • 我认为将实体状态设置为 Detached 会更好。
  • 您可以在保存更改的上下文中查看 ChangeTracker,但它回避了您缺少 POCO 上的 属性的事实。

标签: c# entity-framework


【解决方案1】:

尝试分离它,这样 EF 将停止跟踪它并且不会采取任何操作来序列化对 DB 的更改。

https://msdn.microsoft.com/en-us/library/system.data.entity.core.objects.objectcontext.detach(v=vs.113).aspx

((IObjectContextAdapter)DbContext).Detach(entity);

【讨论】:

  • 谢谢哈齐姆迪肯利。我还发现我的框架没有清除实体的临时工作副本,这加剧了错误,因为最初您的解决方案似乎不起作用。
  • 对 ef core 的任何帮助
猜你喜欢
  • 2012-09-06
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多