Azure EF Code First Migration Initializer

时间:2012-08-15 02:25:00

标签: entity-framework entity-framework-4 azure ef-code-first ef-migrations

我只是在搞乱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开始。

我已经三次检查了我的connectionString,所以这不是 - 任何想法?

3 个答案:

答案 0 :(得分:8)

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

Publish Web Application Settings

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

这个blog post on MSDN详细解释了这个过程。

答案 1 :(得分:1)

我认为您在类型字符串中缺少.

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

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

如果该操作可以解决问题,请发表评论,然后我会处理一个与您相匹配的样本,看看我是否能让它发挥作用......

[更新2012-08-15]

好的 - 我想我知道这里发生了什么......你提到“我更新了我的web.config以获得这个:”并展示了你的XML。当我浏览本教程时,我不必在我的web.config中输入任何额外的XML。在发布过程中,Visual Studio的部署过程自动为我添加了XML,并且它“完全正常”。

这是你的解决方案:

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

供参考,以下是我的两个<entityFramework>文件中的web.config部分,首先来自我的项目,第二部分来自我的托管服务(我通过FTP连接到正在运行的网站并下载它)。在该帖子的SO记录号之后,VS项目被称为11964172

本地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文件更改的图片,而不是实际提供输入的代码: - )

答案 2 :(得分:0)

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