Entity framework 实体框架SQL连接未关闭或释放

Entity framework 实体框架SQL连接未关闭或释放,entity-framework,entity-framework-5,entity-framework-4.1,sqlconnection,sqlconnection.close,Entity Framework,Entity Framework 5,Entity Framework 4.1,Sqlconnection,Sqlconnection.close,我使用实体框架和存储库模式,但我们需要调用存储过程,所以我们最终创建了DAL类,其中EF DBContext在DAL类中具有局部私有变量, 私人语境 我尝试在存储库类构造函数中实例化DBContext public VRepository( IDataAccessObjectFactory daoFactory) { _daoFactory = daoFactory; context = _daoFactory.GetEFContext<DbEntities

我使用实体框架和存储库模式,但我们需要调用存储过程,所以我们最终创建了DAL类,其中EF DBContext在DAL类中具有局部私有变量, 私人语境

我尝试在存储库类构造函数中实例化DBContext

public VRepository( IDataAccessObjectFactory daoFactory)
{
        _daoFactory = daoFactory;
        context = _daoFactory.GetEFContext<DbEntities>();           
}
在方法中完成操作后,我尝试从服务层调用上面的dispose方法,类似于调用BLL finally block的dispose方法来处理DBContext对象(我有webapi,webapi->BLL->DAL)


即使在调用context.Dispose()之后,EF创建的Sql连接也不会关闭。任何人都可以建议我关闭SQL连接和处理SQL连接的正确方法。如果我不处理,SQL连接将转到100,这将在一段时间内不允许新连接或工人重新启动。请让我知道一种有效的方法,即在存储库层方法完成后立即处理上下文。

这没有多大意义。为什么要在不同层之间共享上下文?这没有意义。只要让每一层使用它自己的上下文,最好在需要时创建一个新的,完成后销毁。这就是EF的设计用途。我只在存储库层创建了上下文。它不存在于我的BLL中。我在存储库层的上下文中仅处理此线程。因为我必须在每次创建上下文时都使用创建。我将创建上下文的代码从构造函数移到了每个方法,这些方法为每个调用创建上下文,并且上下文是在使用块中创建的,现在我看不到休眠连接
public void Dispose()
    {
        if (context != null)
        {

            context.Dispose();
            // GC.SuppressFinalize(this);
        }
    }