Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC 4-应用程序不接受新连接字符串-AppHarbor部署问题_Asp.net_Asp.net Mvc_Entity Framework_Entity Framework 4.1_Appharbor - Fatal编程技术网

ASP.NET MVC 4-应用程序不接受新连接字符串-AppHarbor部署问题

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

我目前正在从事一个ASP.NETMVC4项目,该项目使用EntityFramework4.3,采用代码优先的方法,使用简单的POCO类。另外,我使用SQLServerExpress作为开发数据库

在构建类并设置连接字符串之后,我运行了我的项目,它为我生成了一个SQL Server Express数据库,没有任何问题

但问题是,我正在尝试部署到AppHarbor,并且连接字符串有问题。AppHarbor要求您将SQL Server安装为“附加组件”,并将连接字符串配置为具有别名,以便将其Sequilizer连接字符串注入从GitHub推送的项目中

以下是他们关于如何工作的文档:

我相信所有这些设置都是正确的,但我的应用程序读取连接字符串的方式似乎有问题

以下是我在本地计算机上使用的开发连接字符串:

<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")
    }