从One DbContext per web request... why?asp.net mvc 4 - 好的,每个线程共享DbContext?
我的理解是,一个DbContext实例不应该在并发web请求之间共享,所以绝对不能跨线程。 但是,如何跨非并发web请求共享它?
由于线程敏捷(What is the meaning of thread-agility in ASP.Net?),我说对了一个线程可以处理多个Web请求之前,它死了吗?
如果是这样,依赖注入每个线程的DbContext实例是否安全?
这样做的原因是我使用Unity,它不包括每个请求生命周期选项。 从MVC, EF - DataContext singleton instance Per-Web-Request in Unity,我想我可以使用自定义的LifetimeManager;我只是想知道使用PerThreadLifetimeManager是否安全。
谢谢!这确实是一个很好的解决方案。但是,DbContext实例是否会被丢弃?另外,你说“一个请求仍然可以获得多个DbContext实例”,这是否意味着一个请求可以被多个线程处理? – user1501961
@ user1501961:您引用的[question](http://stackoverflow.com/questions/11306888/what-is-the-meaning-of-thread-agility-in-asp-net)解释了一个ASP.NET请求可以在多个线程上处理。这不会同时发生,它是一个异步模型;它可以在与启动时不同的线程上完成请求。不,DbContext不会像这样自动处理。你必须自己编码,或切换到不同的容器。关于所有其他框架都有内置的支持。 – Steven
会使用HierarchicalLifetimeManager解决问题吗?在我看来,通过使用HierarchicalLifetimeManager,它为每个Web请求创建一个新的子容器,并在容器被处置时(Web请求完成时)处理这些实例。我对吗? – user1501961