EF callcontext 线程释放问题

liyangfd 2015-01-24 11:07:11
在学习视频中发现这个callcontext ,但这个线程是怎么释放呢



/// <summary>
/// 实现对EF上下文实例进行管理,保证线程内唯一
/// </summary>
/// <returns></returns>
public static ObjectContext GetCurrentDbContext()
{
//CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。 数据槽不在其他逻辑线程上的调用上下文之间共享。 当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中。

//当对另一个 AppDomain 中的对象进行远程方法调用时,CallContext 类将生成一个与该远程调用一起传播的 LogicalCallContext 实例。 只有公开 ILogicalThreadAffinative 接口并存储在 CallContext 中的对象被在 LogicalCallContext 中传播到 AppDomain 外部。 不支持此接口的对象不在 LogicalCallContext 实例中与远程方法调用一起传输。
ObjectContext context = (ObjectContext)CallContext.GetData("DbContext");

if(context == null)
{
context = new ModelContainer();

CallContext.SetData("DbContext",context);
}

return context;
}


怎么释放这个线程内的EF实例呢???
...全文
397 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Newd 2015-08-24
  • 打赏
  • 举报
回复
当前线程对对象进行储存到线程本地储存区,对象随着线程的销毁而销毁。
likevs 2015-08-24
  • 打赏
  • 举报
回复
你上CSDN上看官方的这个楼CallContext 官方指出它相当于一个本地对话集合,你可以想象为你这次业务处理,从调用第一个方法开始,到整个业务的结束(这中途会调用多种函数)这么一个过程,这个过程完了,它就会被销毁了。 我给出个比喻,当然,我的理解并不代表一定是正确的: 业务处理从方法A();开始,方法A()里同时调用了方法a1(); a2(); a3(); ,也就是说,我们从调用A()开始,就是一次会话开始,中途内部调用的a1(); a2(); a3();还是同样在这个会话过程中,只有当a3(); 完成之后,指针返回到A();最终结束了A();之后,不再有其它调用了,则认为这次会话结束。 假设上面这一函数互相调用的会话过程中,CallContext这个会话集是共享的,也就是A(); a1(); a2(); a3();共享CallContext。 它就相当于seesion,每一个页面请求时生成,中途会伴随,关闭页面时会消失,seesion集本身在会话过程中是一直存在可使用的,就看你想不想用它 CallContext差不多这个原理,你一系列的函数调用过程中,它是存在的,但用与不用,是一回事
liyangfd 2015-01-25
  • 打赏
  • 举报
回复
怎么没有人回答呢。。。。
winnowc 2015-01-25
  • 打赏
  • 举报
回复
EF的设计上DbContext (或者ObjectContext) 就是一个短暂生命周期的对象,不应该在多处使用,而是用到了就创建,用完就销毁。所以这样子传递它很可能是误用。 一般情况下也不需要自己使用CallContext,所以最好是给出一些背景说明,这样子是为了应对什么场景或需求。我能想到的唯一算得上正确的使用场景是因为性能原因,本来对一个context的使用流程被拆分到了两个或多个线程上执行,并且它们很难通过别的方式获取这个公共的context。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧