使用EntityFramework时连接到远程数据库的字符串

时间:2013-02-04 22:09:00

标签: asp.net sql-server sql-server-2008 entity-framework entity-framework-5

我有一个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服务器实例主办。远程数据库主机使用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。我已经设置了这个,因为在托管数据库上,我没有CREATE或DROP数据库的权限,所以我做的是我创建了一个本地创建的备份(在SQL Server Express中) )并使用还原功能将文件还原到我的托管数据库。所以我有一个数据库,它只适用于我的应用程序。

2 个答案:

答案 0 :(得分:1)

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

<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>

答案 1 :(得分:1)

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