EntityFramework Insert因Trigger失败抛出OptimisticConcurrencyException,如何处理?
EntityFramework Insert fails due to Trigger and OptimisticConcurrencyException is thrown, how to handle it?
我在数据库中有一个禁止插入重复数据的触发器。当我输入重复数据时,它不会向 table 添加任何内容,抛出 OptimisticConcurrencyException,我正在吞下(忽略)此异常。当我尝试输入新的正确对象时,EF 尝试 运行 两个 INSERT,但在第一个时再次失败。
我怎样才能从中恢复,所有示例都在讨论失败的更新,是否有关于插入的内容?正如我所读,创建新的 DatabaseContext 将解决问题,但我不能那样做。
创建新的 DatabaseContext 始终是最佳选择(自 Hibernate 以来)。
在您的情况下,您需要从上下文中删除导致错误的实体。
((IObjectContextAdapter)context).ObjectContext.Detach(entity);
抛出可忽略异常后,您可以要求ObjectContext
忽略所有更改。这样添加的实体被标记为Unchanged
;因此在下一个 SaveChanges
调用中,上下文不会考虑它来操作 DB:
(yourContextObject as IObjectContextAdapter).AcceptAllChanges();
我在数据库中有一个禁止插入重复数据的触发器。当我输入重复数据时,它不会向 table 添加任何内容,抛出 OptimisticConcurrencyException,我正在吞下(忽略)此异常。当我尝试输入新的正确对象时,EF 尝试 运行 两个 INSERT,但在第一个时再次失败。
我怎样才能从中恢复,所有示例都在讨论失败的更新,是否有关于插入的内容?正如我所读,创建新的 DatabaseContext 将解决问题,但我不能那样做。
创建新的 DatabaseContext 始终是最佳选择(自 Hibernate 以来)。 在您的情况下,您需要从上下文中删除导致错误的实体。
((IObjectContextAdapter)context).ObjectContext.Detach(entity);
抛出可忽略异常后,您可以要求ObjectContext
忽略所有更改。这样添加的实体被标记为Unchanged
;因此在下一个 SaveChanges
调用中,上下文不会考虑它来操作 DB:
(yourContextObject as IObjectContextAdapter).AcceptAllChanges();