【问题标题】:EF: The underlying provider failed on OpenEF:基础提供程序在打开时失败
【发布时间】:2015-10-29 18:09:52
【问题描述】:

在生产中,我的应用开始出现这个错误:

The underlying provider failed on Open

据我所知,在本地测试应用程序时我没有收到此错误(至少无论我做什么我都无法得到它)。我正在使用 Azure SQL 服务器,这是我的连接字符串:

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=myserver.windows.net,1433;Database=mydb;User ID=username;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

这是我遇到错误的方法之一:

public IEnumerable<Country> GetCountries()
{
        List<Country> countries;
        using (var databaseContext = new Database())
        {
            countries = databaseContext.Countries.OrderBy(c => c.Name).ToList();
        }

        return countries;
}

我还想强调,错误并非一直都在发生,它是随机发生的。今天开始发生这种情况,我没有更改此代码,也没有更改连接字符串,也没有更改数据库设置,但是(!)我已经将一些方法从同步重构为异步 - 我不知道这是否与这个特定问题有关。

据我所知,这仅发生在 ASP.net Web API 项目中,而不发生在 ASP:net MVC 项目中(它们共享相同的服务层并从服务中调用相同的方法)

最后是整个堆栈跟踪的 Pastebin 链接(我不会在这里粘贴它,因为它太大了):link

【问题讨论】:

  • 它是随机的还是总是链接到异步函数(如 GetUsaStates() )?如果是这样,我希望一个新线程无法访问在启动线程上创建的 EF 上下文

标签: c# asp.net entity-framework azure


【解决方案1】:

请看这个帖子:Error 'The underlying provider failed on Open'

应该解决您的问题的帖子摘录如下:

将我的代码更改为以下修复它:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}

【讨论】:

  • 所以我每次初始化DB Context的时候都要添加这段代码?
  • 还有一件事为什么会突然发生?正如我所说,我没有更改代码中的任何内容
【解决方案2】:

将连接字符串添加到您的 dbcontext 构造函数中,例如 `

public YourDbContext()
          :base(name="YourDbContext")
{
this.Database.Connection.ConnectionString = "Data Source=****;Initial Catalog=****;User ID=****;Password=****";
}

【讨论】:

    【解决方案3】:

    我在 Azure 中测试时遇到了同样的错误。就我而言,我忘记更新应用程序 web.config 中的密码。发布更新它对我来说工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      相关资源
      最近更新 更多