我有一个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中) )并使用还原功能将文件还原到我的托管数据库。所以我有一个数据库,它只适用于我的应用程序。
答案 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派生类的名称相匹配。