我在DB中有一个禁止插入重复数据的触发器。当我输入重复数据时,它不会向表中添加任何内容,抛出OptimisticConcurrencyException并且我正在吞咽(忽略)此异常。当我尝试输入新的正确对象时,EF会尝试同时运行两个INSERT并在第一个上再次失败。
如何从中恢复,所有示例都在讨论失败的更新,INSERT有什么关系吗?正如我已经阅读过创建新的DatabaseContext将解决问题,但我无法这样做。
答案 0 :(得分:1)
创建新的DatabaseContext始终是最佳选择(自Hibernate以来)。 在您的情况下,您需要从上下文中删除导致错误的实体。
((IObjectContextAdapter)context).ObjectContext.Detach(entity);
答案 1 :(得分:0)
在抛出可忽略的异常后,您可以要求ObjectContext
忽略所有更改。这样添加的实体就标记为Unchanged
;因此,在下一个SaveChanges
调用中,上下文不会考虑操纵DB:
(yourContextObject as IObjectContextAdapter).AcceptAllChanges();