【发布时间】: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