【发布时间】:2013-12-22 13:23:30
【问题描述】:
我正在使用 EF6.02 和 Web API 2 使用 VS2013 开发应用程序。我正在使用 ASP.NET SPA 模板,并针对由 sql 服务器支持的实体框架数据源创建 RESTful api。 (在开发中,它驻留在 SQL Server 本地实例上。)
到目前为止,我有两种 API 方法(一种只是读取数据,一种是写入数据),我正在通过在 javascript 中调用它们来测试它们。当我只在脚本中调用一个方法时,任何一个都可以完美运行。但是,如果我在脚本中调用两者(不等待任何一个回调触发),我会在调试器中得到不好的结果和不同的异常。一些例外情况表明无法完成保存,因为有待处理的事务。另一个例外说明了与其他线程的冲突。有时,在尝试读取结果集时,读取操作会失败并出现空指针异常。
“不允许新事务,因为会话中还有其他线程在运行。”
这让我怀疑我是否正确地为每个请求获取了一个新的 DBContext。我的代码如下:
static Startup()
{
context = new Data.SqlServer.AppDbContext();
...
}
然后每当实例化一个工作单元时,我都会访问 Startup.context。
我尝试实现工作单元模式,每个请求共享一个 UOW 对象,该对象具有一个 DBContext 对象。
我的问题:我是否有额外的责任来确保网络请求能够“很好地配合”彼此?我希望这是其他人已经处理过的问题。也许我看到的错误是合法的,因为如果一个用户的数据被触摸,它暂时处于无效状态,如果其他请求在那个时候进入,它们确实会失败(我应该编码预期这些失败)。我猜即使每个请求都有自己的 DBContext,它们仍然共享相同的底层 SQL 数据源,所以这可能会导致问题。
我可以尝试整理一个测试用例,但我会得到不同的行为,具体取决于我放置断点的位置以及我在它们上花费的时间,向我重申这是与时间相关的。
感谢您的任何帮助或建议... -本
【问题讨论】:
标签: asp.net sql asp.net-mvc entity-framework