Jeo*_*ida -1 c# asp.net entity-framework
我们在asp.net mvc应用程序(C#/ VS 2k15)上使用"按请求一个dbconnection"模式.基本上我们在BeginRequest上创建一个DbContext,在EndRequest上创建Dispose()它.
我曾经在HttpContext上保存这个DbContext但是我们遇到了一个更复杂的场景,我们需要运行多个线程并且这个解决方案停止工作,因为HttpContext不在线程之间共享.
首先我想使用CallContext但它的对象应该是Serializable,而不是DbContext的情况.
我想到的(非可选)解决方案是将DbContexts保存在公共静态字典中,其中键(long)是线程ID,但我认为有更好的解决方案.
在线程之间共享DbContext的最佳解决方案是什么?
谢谢.
在线程之间共享DbContext的最佳解决方案是什么?
不这样做.多个线程不能同时访问DbContext实例.
让你的后台进程在一个using块中创建一个新的DbContext .底层数据库连接被池化并将被重用.
如果您只想在来自单个http请求的任务之间传递DbContext实例,并且可以保证它不会被两个并发的任务或线程访问,那么您可以使用AsyncLocal.
您还可以捕获引用DbContext的局部变量,并将其显式传递给您等待的任务.例如
await Task.Run(() =>
{
var e = db.MyEntity.First();
//. . .
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |