我一直在收到錯誤「底層提供程序在打開時失敗」。最近,我一直在試圖找出原因。仔細檢查錯誤,內部異常是「連接未關閉,連接當前狀態正在連接」。和堆棧跟蹤是「底層提供程序在打開時失敗」實體框架錯誤
"at System.Data.ProviderBase.DbConnectionClosedConnecting.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)"
據我可以告訴錯誤似乎隨機發生或可能在更改應用程序時發生。任何幫助將不勝感激。
我目前的設置是
- IIS快遞
- 的Microsoft SQL Server Express版本
- 的Visual Studio 2012
- MVC的Web API \ Asp.net MVC 4
- 實體框架5
我的數據層是在Repository pa ttern並通過結構圖注入。
庫
public class Repository<T> : IDisposable, IRepository<T> where T : class
{
private readonly DbSet<T> _dbSet;
private readonly DbContext _dbContext;
public Repository(IDbContextFactory<MyContext> dbContextFactory)
{
_dbContext = dbContextFactory.Create();
_dbSet = _dbContext.Set<T>();
}
//removed for brevitity
public void Dispose()
{
_dbContext.Dispose();
}
DbContextFactory爲國際奧委會
public class MyContextFactor : IDbContextFactory<MyContext>, IDisposable
{
private MyContext _dataContext;
public MyContextFactor Create()
{
return _dataContext ?? (_dataContext = new MyContext());
}
public void Dispose()
{
_dataContext.Dispose();
}
}
結構映射註冊表
For(typeof(IDbContextFactory<MyContext>)).HybridHttpOrThreadLocalScoped().Use(typeof(MyContextFactory));
連接字符串
<add name="MyContextConnectionString" connectionString="metadata=res://*/Model.MyProject.csdl|res://*/Model.MyProject.ssdl|res://*/Model.MyProject.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=MyDB;User Id=SQLUser;Password=****;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>
事情我已經試圖解決這個問題,至今還沒有制定
- 確保環境是每HTTP上下文通過結構圖範圍
- 添加到處置版本庫
- 將ContextFactory添加到配置
- 從集成的Sql auth切換到Sql身份驗證
如果您使用DbContext,則您的連接字符串不應該是實體連接字符串,而應該是常規連接字符串。我不知道從連接字符串指向什麼元數據,因爲使用DbContext時,沒有edmx或csdl,ssdl,msl文件形式的工件。通常當你安裝SqlExpress時,數據源是。\ SQLEXPRESS,但在你的情況下,它是「數據源=(本地)」 - 沒有SQLEXPRESS實例(如果你真的像這樣安裝它可能會好)。嘗試使用Sql Server Management Studio連接到您的數據庫,並且當您成功在您的連接字符串中使用相同的數據時 – Pawel
我有同樣的問題,它是SQL服務器身份驗證問題,並且像@Pawel說的那樣,嘗試使用Management Studio連接到服務器或來自Visual Studio的數據庫瀏覽器。 –