MSSQL错误'基础提供程序在Open'上失败'使用WCF&的EntityFramework

时间:2016-10-25 09:16:07

标签: c# sql-server entity-framework wcf

我使用 EntityFramework 6 进行数据库查询:

public class Entities : DbContext {
    public Entities ();

    public DbSet<Analysis> Analysis { get; set; }
}

public class TableController {
    public function List<DataSet> GetDataSets () {

        var query = "SELECT ... FROM ... WHERE ...";

        var queryReturnType = typeof(Analysis);

        var result = this.Entities.Database.SqlQuery(queryReturnType, query);

        foreach (var elem in result) {
             ...
        }        
    }
}

我在自托管WCF服务中使用了所有这些,它允许多线程:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext = false, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class RestService : IRestService {
    ...
}

该查询适用于所有请求的90%-95%,但有时我会从我尝试迭代的 EntityFramework 中收到异常查询结果(foreach):

  

打开

的基础提供程序出错      

在System.Data.Entity.Core.EntityClient.EntityConnection.Open()

     

at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)

     

at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](Func'1 func,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction,Boolean releaseConnectionOnSuccess)

     

at System.Data.Entity.Core.Objects.ObjectContext。&lt;&gt; c__DisplayClass65'1.b__63()

     

在System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func'1操作)

     

at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably [TElement](String commandText,String entitySetName,ExecutionOptions executionOptions,Object [] parameters)

     

at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQuery [TElement](String commandText,ExecutionOptions executionOptions,Object [] parameters)

     

at System.Data.Entity.Internal.InternalContext。&lt;&gt; c__DisplayClass14'1.b__13()

     

at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()

该服务托管在 Windows Server 2012 R2 上,当我在本地 Windows 10 计算机上执行该服务时,不会发生错误。

可能导致错误的原因是什么?

2 个答案:

答案 0 :(得分:1)

我和EF有同样的问题。开始时,异常每天抛出一次,每天10次,最近48次/天。当然,我们无法重现这个“基础提供商在开放时失败”。我做了一切,确保我们不泄漏连接,总是使用

using (var context = new DataContext()) {
    List<Billing> result = (from item in context.Billing.AsNoTracking()
                            select item).ToList();
    return result;
}

对我们来说,解决办法就是强行打开连接。

public DataContext() : base("your connectionstring")               
    **this.Database.Connection.Open();**
    this.Configuration.LazyLoadingEnabled = false;
    this.Configuration.ProxyCreationEnabled = false;
}

希望它也适合你!

答案 1 :(得分:0)

查看连接字符串,它看起来有效。我发现这篇博文,这里的问题是他们使用的是集成安全性。如果您在IIS上运行,则IIS用户需要访问数据库。

如果您正在使用Entity Framework with Transactions,Entity Framework会自动打开和关闭每个数据库调用的连接。因此,在使用事务时,您尝试通过多个连接传播事务。这提升到了MSDTC。

(有关详细信息,请参阅此参考。)

请阅读这篇文章: MSSQL Error 'The underlying provider failed on Open'

Entity Framework The underlying provider failed on Open

Error: The underlying provider failed on Open. How to resolve it?