EF 6在Web.config

时间:2015-10-21 18:19:56

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

我收到下面的错误,对于我的生活我无法解决。我使用身份2的EF 6,几天前工作正常。

我昨天启动了VS 2015,并在发布到测试站点和本地时开始收到错误。即使Web.config配置为使用SQL 2014 Standard服务器,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服务器帐户必须具有对应用程序目录的读写权限。这是必要的,因为Web服务器帐户将自动创建App_Data目录(如果它尚不存在)。       如果应用程序的App_Data目录已存在,则Web服务器帐户仅需要对应用程序的App_Data目录的读写访问权限。这是必要的,因为Web服务器帐户将尝试验证应用程序的App_Data目录中是否已存在Sql Server Express数据库。从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异常,Boolean 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轻松连接到数据库。

我应该寻找什么?

4 个答案:

答案 0 :(得分:2)

要检查的第一个地方是您的数据库上下文,以确保您已指定连接字符串的名称:

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

    // ...

答案 1 :(得分:0)

您的连接字符串看起来很好。该错误表明您的web.config或代码中仍有一些内容正在查找奇怪的App_Data目录。您是否已尝试在App_Data或| DataDirectory |的解决方案中进行查找。

看起来,在您的代码或(LocalDb)或SQlExpress

中有一个App_data文件夹的引用

答案 2 :(得分:0)

您的下面没有Config Transform文件,例如 Web.Debug.config Web.Release.confi g Web.config 文件吗?它可能正在重写您的连接字符串。

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

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

答案 3 :(得分:0)

经过大量调试后,我在Startup.Auth.cs中的namespace中发现了拼写错误

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

一旦命名空间得到纠正,一切都按计划运行: - )