Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EntityException:基础提供程序在打开时失败_Entity Framework_Ninject - Fatal编程技术网

Entity framework EntityException:基础提供程序在打开时失败

Entity framework EntityException:基础提供程序在打开时失败,entity-framework,ninject,Entity Framework,Ninject,我在使用实体框架连接数据库时遇到问题。我在尝试连接到数据库时随机出现以下错误 EntityException: The underlying provider failed on Open. The connection was not closed. The connection's current state is connecting. 为了让您了解我的设置,我使用了MVC4和Ninject。我还使用了中描述的存储库和工作单元模式。我在MVC4中使用默认的NinjectWebCommon

我在使用实体框架连接数据库时遇到问题。我在尝试连接到数据库时随机出现以下错误

EntityException: The underlying provider failed on Open.
The connection was not closed. The connection's current state is connecting.
为了让您了解我的设置,我使用了MVC4和Ninject。我还使用了中描述的存储库和工作单元模式。我在MVC4中使用默认的NinjectWebCommon文件,我的RegisterServices方法如下

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IMyEntities>().To<MyEntities>();
    kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
    // UnitOfWork has a dependency on MyEntities

    kernel.Bind<IAccountManager>().To<AccountManager>(); 
    kernel.Bind<ITransactionManager>().To<TransactionManager>(); 
    // AccountManager and TransactionManager has a dependency on UnitOfWork
}
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().To();
kernel.Bind().To().InRequestScope();
//UnitOfWork依赖于MyEntities
kernel.Bind().To();
kernel.Bind().To();
//AccountManager和TransactionManager依赖于UnitOfWork
}
我的页面加载正常,但页面上有两个ajax调用导致了错误。删除ajax调用后,错误永远不会发生。当只进行了1次ajax调用时,错误永远不会发生。只有当两个调用同时进行时,才会发生错误

下面是两个不同的web api控制器

public class AccountController : ApiController
{
    private readonly IAccountManager _AccountManager;

    public AccountController(IAccountManager accountManager)
    {
        _AccountManager = accountManager;
    }

    public HttpResponseMessage Get()
    {
        IEnumerable<Account> accounts = _AccountManager.Get();
        return Request.CreateResponse(HttpStatusCode.OK, accounts);
    }
}
公共类AccountController:ApicController
{
私有只读IAccountManager\u AccountManager;
公共帐户管理员(IAccountManager帐户管理员)
{
_AccountManager=AccountManager;
}
公共HttpResponseMessage Get()
{
IEnumerable accounts=\u AccountManager.Get();
返回请求.CreateResponse(HttpStatusCode.OK,accounts);
}
}

公共类事务控制器:ApiController
{
私有只读ITransactionManager\u TransactionManager;
公共事务控制器(ITransactionManager事务管理器)
{
_TransactionManager=TransactionManager;
}
公共HttpResponseMessage Get()
{
IEnumerable事务=_TransactionManager.Get();
返回请求.CreateResponse(HttpStatusCode.OK,事务);
}
}

我真的不知道在这里该怎么办。我已经阅读了StackOverflow和Google上与此相关的每一篇文章,但我找不到答案。有人知道我能做些什么来阻止这个问题的发生吗?

我也有同样的问题,最终我发现同一个UnitOfWork实例是从不同的线程访问的。我对Ninject不太熟悉,但我建议检查您的帐户和TransactionManager,以确保他们正在访问UnitOfWork的不同实例。

不完全清楚底层上下文的位置和生命周期,但您必须确保两个控制器都有自己的上下文。现在似乎一个控制器处理上下文,而另一个控制器在第一个控制器仍然忙的时候做同样的事情。我有完全相同的问题,不使用事务(TransactionScope类)似乎暂时解决了我的问题。我还没有弄清楚TransactionScope到底是如何破坏连接的。这听起来像是发生在我身上的事情。当您发现同一个UnitOfWork正在从不同的线程访问时,您如何解决它?我使用Unity容器进行DI,并错误地为存储库的解析器提供了一个set实例。因此,每次我解析一个存储库时,它都有相同的常量工作单元,在我的例子中,也有相同的ObjectContext。最后,我将UnitOfWork实例的创建移到了我的Repository类中,从那以后我就没有遇到任何问题。
public class TransactionController : ApiController
{
    private readonly ITransactionManager _TransactionManager;

    public TransactionController(ITransactionManager transactionManager)
    {
        _TransactionManager = transactionManager;
    }

    public HttpResponseMessage Get()
    {
        IEnumerable<Transaction> transactions = _TransactionManager.Get();
        return Request.CreateResponse(HttpStatusCode.OK, transactions);
    }
}