【问题标题】:EF 6 not using connection string in Web.configEF 6 未在 Web.config 中使用连接字符串
【发布时间】:2016-01-20 20:58:47
【问题描述】:

我收到以下错误,我终生无法解决。我正在使用带有 Identity 2 的 EF 6,几天前它运行良好。

我昨天启动了 VS 2015,并在发布到测试站点和本地时都开始收到错误。即使 Web.config 配置为使用 SQL 2014 标准服务器,EF 也几乎是在寻找 SQL Express 的本地实例。

这是错误:

“/”应用程序中的服务器错误。 建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例) 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

SQLExpress 数据库文件自动创建错误:

连接字符串使用应用程序 App_Data 目录中的数据库位置指定本地 Sql Server Express 实例。提供者试图自动创建应用程序服务数据库,因为提供者确定该数据库不存在。要成功检查应用服务数据库是否存在并自动创建应用服务数据库,必须满足以下配置要求:

如果应用程序在 Windows 7 或 Windows Server 2008R2 上运行,则需要特殊的配置步骤来启用提供程序数据库的自动创建。更多信息请访问:http://go.microsoft.com/fwlink/?LinkId=160102。如果应用程序的 App_Data 目录尚不存在,则 Web 服务器帐户必须具有对应用程序目录的读写权限。这是必要的,因为如果 App_Data 目录不存在,Web 服务器帐户将自动创建它。 如果应用程序的 App_Data 目录已存在,则 Web 服务器帐户只需要对应用程序的 App_Data 目录进行读写访问。这是必要的,因为 Web 服务器帐户将尝试验证 Sql Server Express 数据库是否已存在于应用程序的 App_Data 目录中。从 Web 服务器帐户撤消对 App_Data 目录的读取访问权限将阻止提供程序正确确定 Sql Server Express 数据库是否已经存在。当提供程序尝试创建现有数据库的副本时,这将导致错误。需要写入权限,因为在创建新数据库时会使用 Web 服务器帐户的凭据。 机器上必须安装 Sql Server Express。 Web 服务器帐户的进程标识必须具有本地用户配置文件。有关如何为计算机和域帐户创建本地用户配置文件的详细信息,请参阅自述文件。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。

堆栈跟踪:

[SqlException (0x80131904):在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定实例)] System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection,Action`1 wrapCloseInAction)+92 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +285

这是 Web.config 中的连接字符串和 EF 配置:

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>
<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=SQL5017.Smarterasp.net;Initial Catalog=DB_9CF975_moverlive;User Id=xxxxxxxxx;Password=xxxxxxx;" providerName="System.Data.SqlClient" />
</connectionStrings>

我可以使用带有上述连接字符串的 SQL Server Management Studio 很好地连接到数据库。

我应该寻找什么?

【问题讨论】:

  • 你自己做过研究吗?您尝试如何(使用哪个代码)建立连接?
  • 在第一次访问 DbContext 之前设置断点。看db.Database.Connection.ConnectionString

标签: c# sql asp.net sql-server entity-framework


【解决方案1】:

经过多次调试,我在 Startup.Auth.cs 的 namespace 中发现了一个错字

这意味着没有连接字符串被传递给DefaultConnectionFactory,这意味着连接工厂随后使用上下文名称作为默认连接字符串中的数据库名称。 (此默认连接字符串指向本地计算机上的 .\SQLEXPRESS,除非注册了不同的 DefaultConnectionFactory。)

更正命名空间后,一切都按计划运行 :-)

【讨论】:

    【解决方案2】:

    您的 Web 下碰巧没有配置转换文件,例如 Web.Debug.configWeb.Release.config。 config 文件,你呢?它可能正在重写您的连接字符串。

    通常配置转换文件在您发布站点时进行转换,但我不确定它们在某些调试模式下如何工作,因为 ASP 项目有几种模式,如 IIS Express 和本地 IIS。

    我今天遇到了一个 App.config 文件,一个 App.Debug.config 正在重写我的连接字符串,我什至没有注意到有一个 App.Debug.config 直到我展开节点。它有一个完全不同的连接字符串。

    【讨论】:

    • 我确实有两个硫糖配置转换,但它们都不包含任何连接字符串。
    【解决方案3】:

    您的连接字符串看起来不错。该错误表明您的 web.config 或代码中仍有一些东西正在寻找 App_Data 目录,这很奇怪。您是否尝试在您的解决方案中查找 App_Data 或 |DataDirectory| .

    看起来,您的代码或 (LocalDb) 或 SQlExpress 中某处有对 App_data 文件夹的引用

    【讨论】:

    • 谢谢萨姆苏。我搜索了这些,但在解决方案中找不到对它们的任何引用。
    【解决方案4】:

    首先要检查的是您的数据库上下文,以确保您已指定连接字符串的名称:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", false)
        {
        }
    
        // ...
    

    【讨论】:

    • 谢谢史蒂夫。我已经检查了数据库上下文,它检查得很好:public class ApplicationDbContext : IdentityDbContext&lt;ApplicationUser&gt; { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { }
    • ApplicationDbContext.Database.Connection.ConnectionString的值是多少?
    • 不太确定如何检查它的值。找不到 ApplicationDbContext.Database.Connection.ConnectionString 属性。
    • 现在考虑一下...我做了一个“添加配置转换”,在那里我右键单击了 Web.config 并在前几天选择了该选项。之后我再也没有检查过。这可能是一个原因。 Web.Release.config 和 Web.Debug.config 中不包含任何连接配置。
    猜你喜欢
    • 2012-11-16
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2010-12-14
    相关资源
    最近更新 更多