Sql server 2008 &引用;基础提供程序在打开时失败";实体框架错误
我一直收到错误“基础提供程序在打开时失败”。最近,我一直在努力找出原因。仔细检查错误时,内部异常为“连接未关闭。连接的当前状态为连接”。堆栈跟踪为Sql server 2008 &引用;基础提供程序在打开时失败";实体框架错误,sql-server-2008,entity-framework,sql-server-express,Sql Server 2008,Entity Framework,Sql Server Express,我一直收到错误“基础提供程序在打开时失败”。最近,我一直在努力找出原因。仔细检查错误时,内部异常为“连接未关闭。连接的当前状态为连接”。堆栈跟踪为 "at System.Data.ProviderBase.DbConnectionClosedConnecting.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, D
"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 Edition
- Visual Studio 2012
- MVC Web API\Asp.net MVC 4
- 实体框架5
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();
}
public class MyContextFactor : IDbContextFactory<MyContext>, IDisposable
{
private MyContext _dataContext;
public MyContextFactor Create()
{
return _dataContext ?? (_dataContext = new MyContext());
}
public void Dispose()
{
_dataContext.Dispose();
}
}
公共类存储库:IDisposable,IRepository其中T:class
{
私有只读数据库集_DbSet;
私有只读dbcontextu DbContext;
公共存储库(IDbContextFactory dbContextFactory)
{
_dbContext=dbContextFactory.Create();
_dbSet=_dbContext.Set();
}
//为了简洁而去掉
公共空间处置()
{
_dbContext.Dispose();
}
DbContextFactory
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();
}
public class MyContextFactor : IDbContextFactory<MyContext>, IDisposable
{
private MyContext _dataContext;
public MyContextFactor Create()
{
return _dataContext ?? (_dataContext = new MyContext());
}
public void Dispose()
{
_dataContext.Dispose();
}
}
公共类MyContextFactor:IDbContextFactory,IDisposable
{
私有MyContext_dataContext;
公共MyContextFactor创建()
{
返回_dataContext??(_dataContext=new MyContext());
}
公共空间处置()
{
_Dispose();
}
}
国际奥委会结构图注册表
For(typeof(IDbContextFactory<MyContext>)).HybridHttpOrThreadLocalScoped().Use(typeof(MyContextFactory));
For(typeof(IDbContextFactory)).hybridhtttporthreadlocalscope().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上下文
- 已将dispose添加到存储库
- 已将dispose添加到ContextFactory
- 从集成Sql身份验证切换到Sql身份验证