0

我有一个 ASP.NET MVC 应用程序,并且正在使用 EntityFramework 5.0。我还安装了一个“CodeFirstMembershipProvider”Nuget 包,它为 ASP.NET 成员资格提供了一些代码 - 我相信我的 web.config 也进行了更改。

基本上,我的问题是我的应用程序在本地 SQL Server 实例上运行良好,但是当我使用此连接字符串指定远程数据库时:

    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=*******************, 14330;Integrated Security=False;Database=qrcodetr_database;Uid=qrcodetr_admin;Password=*********; Connect Timeout=15;Encrypt=False;Network Library=dbmssocn;Packet Size=4096" />

(密码和主机名已编辑)

它无法使用此连接字符串。它继续尝试使用本地 SQL Server 实例,因此它可以在本地工作,但是当我在我的 Web 和数据库主机上尝试它时,它失败了 - 因为它尝试使用它无法在我的数据库上执行的本地 SQL Server 实例主持人。远程数据库主机使用 SQL Server 2008 R2。

有谁知道为什么会这样或者我能做些什么来解决这个问题?

我不会发布整个 web.config,但这里有几行可能相关:

<add key="DatabaseInitializerForType TreasureHuntDB, QrCodeTreasureHunter" value="DataContextInitializer, QrCodeTreasureHunter"
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>
<membership defaultProvider="CodeFirstMembershipProvider">
  <providers>
    <add name="CodeFirstMembershipProvider" type="CodeFirstMembershipProvider" connectionStringName="DefaultConnection" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="CodeFirstRoleProvider">
  <providers>
    <clear />
    <add name="CodeFirstRoleProvider" type="CodeFirstRoleProvider" connectionStringName="DefaultConnection" />
  </providers>
</roleManager>
      <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

顺便说一句,我能够通过 SQL Server 2008 成功连接到远程数据库,所以这个问题肯定是我的配置问题。

顺便说一句,我使用的是设置为“CreateDatabaseIfNotExists”的 DataContextInitializer。我已将其设置为此,因为在托管数据库上,我没有创建或删除数据库的权限,所以我所做的是我创建了本地创建的其中一个的备份(在 SQL Server Express ) 并使用还原功能将文件还原到我的托管数据库。所以我有一个数据库,它不能与我的应用程序一起使用。

4

2 回答 2

1

这个问题和答案表明您的连接字符串部分应如下所示:

<connectionStrings>
    <clear /> <!--- need this to prevent using LocalSqlServer from machine.config or somewhere becouse it is not present when when publish to hosting -->
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="etc" />  
</connectionStrings>
于 2013-02-04T22:34:16.143 回答
1

您似乎没有告诉 EF 连接字符串的名称,所以它只是按照惯例创建一个。您可以将名称以 的形式传递给 DbContext ctor,也可以"Name=DefaultConnection"在配置中重命名连接字符串,使其名称与 Db​​Context 派生类的名称匹配。

于 2013-02-04T23:52:25.740 回答