4

我只是在弄乱 Azure,我似乎无法让我的 Db 工作。我正在关注这里所说的内容:https ://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database/我更新了我的 web.config 以拥有这个:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      <contexts>
          <context type="DownloadThis.Models.DownloadThisDb, DownloadThisDb">
              <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion">
                  <parameters>
                      <parameter value="DownloadThisDb_DatabasePublish" />
                  </parameters>
              </databaseInitializer>
          </context>
      </contexts>
  </entityFramework>

如示例所示,但我不断收到此错误:

初始化字符串的格式不符合从索引 0 开始的规范。

我已经三次检查了我的连接字符串,所以不是 - 有什么想法吗?

4

3 回答 3

8

假设您使用 VS2012 发布向导进行发布,我遇到了同样的问题。如果您选择让发布向导启用代码优先迁移,而不是在代码中手动连接它们,那么您需要在发布设置中提供连接字符串。您的正常连接字符串不用于运行迁移,这个新的连接字符串仅用于此目的。这很好,因为您可以指定一个具有提升权限的帐户来执行迁移,但是,您的应用程序不会在此用户上下文下运行。问题是向导没有使指定此连接字符串的需要非常明显。如果你不提供这个,你最终会得到一个空的迁移连接字符串,你会花很多时间试图弄清楚什么'

发布 Web 应用程序设置

假设您的上下文类名为 FooContext。按照惯例,您的 web.config 中将有一个名为 FooContext 的连接字符串。当您通过此向导启用代码迁移时,该向导将创建名为 FooContext_DatabasePublish 的第二个连接字符串,该字符串仅用于运行您的代码首次迁移。

MSDN 上的这篇博客文章详细解释了这个过程。

于 2012-09-15T15:40:09.677 回答
1

我认为您.的类型字符串中缺少 a :

<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion">

代码上方的红色矩形使其难以阅读......

如果那不能解决它,发表评论,我会制作一个样本来匹配你的,看看我是否能让它工作......

[2012-08-15 更新]

好的 - 我想我知道这里发生了什么......您提到“我更新了我的 web.config 以拥有这个:”并显示了您的 XML。当我浏览本教程时,我不必在我的web.config. 在发布过程中,Visual Studio 的部署过程自动为我添加了 XML,这一切都“正常工作”。

这是您的解决方案:

返回到web.config没有这些更新的原始文件,然后再次尝试发布。

作为参考,以下是<entityFramework>我的两个web.config文件中的部分,第一个来自我的项目,第二个来自我的托管服务(我通过 FTP 连接到正在运行的站点并下载它)。11964172在这篇文章的 SO 记录号之后调用 VS 项目:

本地web.config文件设置

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

部署web.config文件设置

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <contexts>
      <context type="_11963331.Models.ToDoDb, 11963331">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[_11963331.Models.ToDoDb, 11963331], [_11963331.Migrations.Configuration, 11963331]], EntityFramework, PublicKeyToken=b77a5c561934e089">
          <parameters>
            <parameter value="_11963331.Models.ToDoDb_DatabasePublish" />
          </parameters>
        </databaseInitializer>
      </context>
    </contexts>
  </entityFramework>

我想这解释了为什么他们拍摄了web.config文件更改的照片,而不是实际提供要输入的代码:-)

于 2012-08-15T04:34:22.240 回答
0

看到这个问题。如果您将部署连接字符串保留为“远程连接字符串”,并选中“执行代码优先迁移”框,您将获得此异常作为迁移连接字符串,DownloadThisDb_DatabasePublish将无法正确定义。指定一个真实的连接字符串,而不是在部署向导中将连接字符串框留空,或者定义一个DownloadThisDb_DatabasePublish在 Azure 站点配置中命名的连接字符串。

于 2015-05-31T20:42:36.503 回答