and*_*rea 11 c# multithreading savechanges entity-framework-4
我试着在DB上保存多线程processo的日志,但是我收到以下错误:不允许新事务,因为会话中还有其他线程在运行.
在每个胎面我都有这个功能:
internal bool WriteTrace(IResult result, string message, byte type)
{
SPC_SENDING_TRACE trace = new SPC_SENDING_TRACE(
message,
Parent.currentLine.CD_LINE,
type,
Parent.currentUser.FULLNAME,
Parent.guid);
Context.SPC_SENDING_TRACE.AddObject(trace);
if (Context.SaveChanges(result) == false)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
每个线程的Context都不同,但与DB的连接始终是相同的.
有没有办法解决这个问题?
谢谢Andrea
eca*_*ver 37
你应该为每个事务创建一个上下文然后处理它,你可以这样做:
using(var ctx = new MyContext()) {
//do transaction here
}
Run Code Online (Sandbox Code Playgroud)
在关闭的括号之后,处理上下文.
为了更好地理解,请参阅这篇文章,您可以通过ken2k找到一个很好的答案.希望你能解决你的问题:)
更新:
您还应该尝试添加.ToList()到您拥有的每个LINQ查询.迭代LINQ结果时,在迭代完成之前不能进行任何更改.检查您是否有类似的东西或共享更多代码,即您调用的代码段WriteTrace.希望这次这实际上对你有所帮助.
| 归档时间: |
|
| 查看次数: |
33827 次 |
| 最近记录: |