我在使用實體框架連接到我的數據庫時遇到問題。試圖連接到數據庫時,我隨機得到以下錯誤...EntityException:底層提供程序在打開時失敗
EntityException: The underlying provider failed on Open.
The connection was not closed. The connection's current state is connecting.
爲了給你我的設置,我使用MVC 4和Ninject一些背景。我還使用this article中描述的存儲庫和工作單元模式。我使用的是默認NinjectWebCommon文件中的MVC 4,我的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調用被刪除時,錯誤不會發生。當只有1個ajax調用發生時,錯誤不會發生。只有兩個呼叫同時發生時纔會發生錯誤。
這裏有2個不同的網頁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的文章,但找不到答案。有沒有人知道我能做些什麼來阻止這個問題的發生?
基礎上下文的位置和生命週期的位置並不完全清楚,但您必須確保兩個控制器都有自己的上下文。現在看起來,一個控制器可以解決上下文問題,而另一個控制器在第一個控制器仍然忙時也是如此。 –
我有完全相同的問題,沒有使用事務(TransactionScope類)似乎已經暫時解決了我的問題。我還沒有弄清楚TransactionScope確實會毀掉連接。 –