实体框架:在单个请求中删除和添加具有相同密钥的实体

ANK*_*KIT 6 c# orm entity-framework code-first

我需要在单个请求中删除并添加具有相同主键值的实体,有人可以建议我解决方案吗?

下面是我给出错误的示例代码:违反PRIMARY KEY约束'PK_Table'.无法在对象'dbo.Table'中插入重复键.

context.Set<Entity>().Attach(existingEntityObj);
Entry(existingEntityObj).State = EntityState.Deleted;

context.Set<Entity>().Add(newEntityObj);
context.Entry<Entity>(newEntityObj).State = EntityState.Added;

context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

假设两个对象(existingEntityObj和newEntityObj)在主键属性中具有相同的值.

提前致谢!!

Kyl*_*ode 7

您需要执行两次SaveChanges()调用才能使其正常工作.这里的问题是,虽然看起来你首先删除记录然后添加一个新记录,但框架实际上是先插入插入.

原因是因为实体框架不能让您精确控制操作发生的订单.因此,最好的办法是将两者包装在单独的TransactionScope中,这样可以控制正在发生的各个事务.

你可以在这里阅读更多内容:https://blogs.msdn.microsoft.com/alexj/2009/01/11/savechangesfalse/

  • 类似的答案与交易示例/sf/ask/182048191/#2601143 (2认同)