【问题标题】:Azure EF Code First Migration InitializerAzure EF 代码优先迁移初始化程序
【发布时间】:2012-08-15 02:24:59
【问题描述】:

我只是在弄乱 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,所以不是 - 有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      代码上方的红色矩形让人难以阅读...

      如果这不能解决问题,请发表评论,我会制作一个与您的匹配的示例,看看我是否可以让它工作......

      [2012-08-15 更新]

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

      这是您的解决方案:

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

      作为参考,这里是我的两个 web.config 文件中的 &lt;entityFramework&gt; 部分,第一个来自我的项目,第二个来自我的托管服务(我通过 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 文件更改的照片,而不是实际提供要输入的代码:-)

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-26
          • 2013-11-05
          • 1970-01-01
          • 2016-03-18
          • 1970-01-01
          • 1970-01-01
          • 2019-02-21
          • 1970-01-01
          相关资源
          最近更新 更多