Azure EF代码优先迁移初始化器

4

我正在尝试使用Azure,但似乎无法使我的数据库正常工作。我正在按照这里所说的步骤进行操作: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开始。
我已经三次检查了我的连接字符串,所以不是它——有什么想法吗?
3个回答

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

Publish Web Application Settings

假设你的上下文类名为FooContext。按照惯例,你的web.config文件中将有一个名为FooContext的连接字符串。当你通过此向导启用代码迁移时,向导将创建第二个连接字符串,命名为FooContext_DatabasePublish,该连接字符串仅用于运行你的首次代码迁移。
这篇MSDN博客文章详细解释了这个过程。

1

我认为你的类型字符串中缺少了一个 .

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

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

如果这样做没有解决问题,请发表评论,我会制作一个与您的匹配的示例,并尝试让它正常工作...

[更新于2012-08-15]

好的 - 我想我知道这里出了什么问题... 您提到“我更新了我的web.config以包含此内容:”,并显示了您的XML。 当我进行教程时,我不需要在我的web.config中输入任何额外的XML。 在发布过程中,XML由Visual Studio的部署过程自动添加,并且一切“都可以正常工作”。

以下是您的解决方案:

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

供参考,以下是我的两个web.config文件中的<entityFramework>部分,第一个来自我的项目,第二个来自我的托管服务(通过FTP连接到运行的站点并下载)。 VS项目名为11964172,即此帖子的SO记录编号:

本地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文件的更改,而没有提供要输入的代码 :-)


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接