EntityException:底层提供程序在Open上失败

时间:2012-11-26 22:24:47

标签: entity-framework ninject

我在使用Entity Framework连接到我的数据库时遇到问题。尝试连接数据库时,我随机收到以下错误...

EntityException: The underlying provider failed on Open.
The connection was not closed. The connection's current state is connecting.

为了给你一些关于我的设置的背景知识,我正在使用MVC 4和Ninject。我也在使用this article中描述的存储库和工作单元模式。我在MVC 4中使用默认的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
}

我的页面加载正常但我在页面上有2个ajax调用导致错误。删除ajax调用后,永远不会发生错误。当只有一个ajax调用时,错误永远不会发生。只有在同时进行两次调用时才会发生错误。

以下是2个不同的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);
    }
}

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);
    }
}

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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,最终我发现从不同的线程访问了相同的UnitOfWork实例。我对Ninject不太熟悉,但我建议检查你的账户和TransactionManager,以确保他们访问UnitOfWork的不同实例。