【问题标题】:Entity Framework vs. stored procedure conflict - Concurrency Exception实体框架与存储过程冲突 - 并发异常
【发布时间】:2018-11-12 05:23:05
【问题描述】:

我对存储过程很陌生,所以请多多包涵。我会尽力解释我遇到的问题,并可以根据需要提供补充信息。

我正在尝试使用实体框架和存储过程来操作数据库。最初,我通过

调用存储过程
context.Database.ExecuteSqlCommand

紧接着,我通过实体框架调用一个以DB.SaveChanges 结尾的方法。虽然前者执行没有问题,但一旦我在后者中达到DB.SaveChanges,我就会遇到并发异常:

影响了意外数量的行...

我认为存在并发问题,实体框架和存储过程都试图访问数据库但发生冲突,但我无法找到类似的问题以及如何解决此问题。

有人有什么建议吗?

【问题讨论】:

  • 该存储过程调用是否在 using (var ctx = new DbContext()) 构造中?由于该存储过程更改了 EF 背后的数据库,因此您应该在 EF DbContext 处于活动状态时执行此操作 - 运行存储过程,然后确保创建一个 new b> DbContext 以便从数据库中读取新的更改数据 ....
  • @marc_s 在设置上下文等于 DB 后,通过 context.Database.ExecuteSqlCommand 调用存储过程。然后实体框架通过 BaseQuery 执行 Get,更新值并调用 DB.SaveChanges,此时我得到异常。是否应该在两个调用之间创建一个新的上下文?有没有办法让存储过程“放手”?我还看到了在存储过程中/之后执行 context.SaveChanges 的建议。
  • @S.Akbari 我查看了提供的链接,它似乎很好地总结了这个问题。但是,我对建议有点不清楚, cb 指的是什么?我没有在上下文或 Db 上看到 ConflictOption 扩展。

标签: c# entity-framework stored-procedures concurrency


【解决方案1】:

存储过程是做什么的?它会插入或更新一些东西吗?您似乎插入、更新或删除了一行,但零行受到影响。

【讨论】:

  • 嗨,Amir,存储过程更新了一个值,而实体框架更新了另一个值。在存储过程完成并且实体框架进行更改并尝试通过 DB.SaveChanges 保存它们之后发生异常。
猜你喜欢
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
相关资源
最近更新 更多