ASP.NET MVC 4-应用程序不接受新连接字符串-AppHarbor部署问题
我目前正在从事一个ASP.NETMVC4项目,该项目使用EntityFramework4.3,采用代码优先的方法,使用简单的POCO类。另外,我使用SQLServerExpress作为开发数据库 在构建类并设置连接字符串之后,我运行了我的项目,它为我生成了一个SQL Server Express数据库,没有任何问题 但问题是,我正在尝试部署到AppHarbor,并且连接字符串有问题。AppHarbor要求您将SQL Server安装为“附加组件”,并将连接字符串配置为具有别名,以便将其Sequilizer连接字符串注入从GitHub推送的项目中 以下是他们关于如何工作的文档: 我相信所有这些设置都是正确的,但我的应用程序读取连接字符串的方式似乎有问题 以下是我在本地计算机上使用的开发连接字符串:ASP.NET MVC 4-应用程序不接受新连接字符串-AppHarbor部署问题,asp.net,asp.net-mvc,entity-framework,entity-framework-4.1,appharbor,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework 4.1,Appharbor,我目前正在从事一个ASP.NETMVC4项目,该项目使用EntityFramework4.3,采用代码优先的方法,使用简单的POCO类。另外,我使用SQLServerExpress作为开发数据库 在构建类并设置连接字符串之后,我运行了我的项目,它为我生成了一个SQL Server Express数据库,没有任何问题 但问题是,我正在尝试部署到AppHarbor,并且连接字符串有问题。AppHarbor要求您将SQL Server安装为“附加组件”,并将连接字符串配置为具有别名,以便将其Sequi
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FranchiseManager-201275154247;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
看起来,Initial Catalog属性指定了实体框架首次启动时要使用的特定数据库。好的,我想我终于可以使用了
我在AppHarbor文档的任何地方都找不到它(可能是.net mvc特有的东西?),但连接字符串必须与我的DbContext类同名
我通过查看其他一些问题找到了一些关于这方面的提示
对于可能遇到相同问题的任何其他人:
确保Web.config中ConnectionString的name属性与DbContext类的名称相同
提交并将项目推送到您的回购协议
确保AppHarbor上的别名与连接字符串的名称相同
在步骤3之后在app harbor上部署新的构建(这是获取新连接字符串名称所必需的)
完成后,我的应用程序启动了Sequilizer数据库,现在运行正常。您必须指定希望DbContext加载的连接字符串的名称。它无法神奇地猜测您希望它使用名为DefaultConnection
的连接。有一种启发式方法说,如果没有指定名称,它将查找name
设置为从DbContext
继承的类名称的connectionstring。如有:
MyAwesomeDatebase : DbContext
<add name="DefaultConnection" connectionString="blah" providerName="System.Data.SqlClient" />
。。。然后实体框架将通过以下方式开箱即用:
<add name="MyAwesomeDatebase" connectionString="blah" providerName="System.Data.SqlClient" />
。。。您是golden。该帐户是否具有数据库创建权限?您遇到的错误是什么?检查连接字符串是否由上下文使用且未硬编码,如果已部署,请检查服务器上的网络配置以确保其正确。您好Shawn。我没有收到任何错误,应用程序只是恢复到EF创建的旧数据库,而不是我提供的新连接字符串。如何测试上下文类是否正在使用它?很抱歉,我不熟悉这种类型的问题。@PhillipKregg是您的连接字符串是其他文件,而不是web。配置它不是特定于AppHarbor的问题。如果不指定连接字符串名称实体框架代码将首先查找与继承DbContext
的类同名的名称。正如您在上面的代码片段中看到的,我确实指定了连接字符串名称。但是Sequilizer字符串只有在名称与DbContext匹配时才起作用——不管我是否有其他名称。有没有关于这个问题的想法?如果有更好的解决方案,我愿意接受不同的方法。好的,这是很好的信息,谢谢!但有一个问题——为什么当我用EF(我的开发环境)创建数据库的第一个实例时,我不需要这样做?我只需要提供连接字符串-没有其他配置。我将在“编辑”下的原始帖子中添加我的上下文类作为一个示例。无所谓-我刚刚发现,在原始连接字符串中,有一个“Initial Catalog”属性指定要使用的数据库。对所有的问题感到抱歉-我正在学习这些东西,所以有很多事情要弄清楚。再次感谢!
<add name="MyAwesomeDatebase" connectionString="blah" providerName="System.Data.SqlClient" />
<add name="DefaultConnection" connectionString="blah" providerName="System.Data.SqlClient" />
public class MyAwesomeDatebase : DbContext
{
public MyAwesomeDatebase() : base("DefaultConnection")
}