从VS 2012发布到Azure网站时,我的Entity Framework种子数据未插入SQL Azure中

Mik*_*Dev 5 entity-framework entity-framework-5 visual-studio-2012 azure-web-sites azure-sql-database

我有一个使用Entity Framework 5.0和Code First的ASP.NET MVC应用程序.

我使用Visual Studio 2012发布了我的网站到Azure网站.除了没有将种子数据插入SQL Azure之外,一切似乎都有效; 该网站的工作,该数据库建成,但种子数据插入.当我在本地计算机上运行时,一切正常.

根据我看到的示例,从Visual Studio 2012发布时,有一个名为"执行代码优先迁移"的选项(见下图).

在此输入图像描述

但是当我尝试发布我的网站时,"执行代码优先迁移"选项不可用. 在此输入图像描述

我相信这可能与我的解决方案配置方式有关.我有3个项目组成我的应用程序.

  • 网站 - 这是一个ASP.NET MVC项目.它确实有一个参考实体框架,但所有数据访问代码(DBContext)都在Data项目中
  • - 这是一个类库.它没有对实体框架的引用
  • 数据 - 该项目引用了实体框架.我有一个继承自DbMigrationsConfiguration的Configuration类.在此Configuration类中,我重写了Seed方法.

这一切都可以在我的本地电脑上运行.在大多数情况下,一切都适用于Azure; 网站工作,数据库建立,但没有插入种子数据.

对于我的场景,当我从Visual Studio 2012发布时,是否有任何建议如何将种子数据插入到SQL Azure中?

Dom*_*rre 0

您需要手动编辑 pubxml 文件 (Properties/PublishingProfiles/YourName.pubxml) 才能显示该复选框。我有一篇博客文章描述了这种情况和解决方案:http://www.dominicstpierre.net/2012/11/enable-code-first-migrations-check-box.html

这部分需要手动修改

<PublishDatabaseSettings>
  <Objects xmlns="">
    <ObjectGroup Name="Namespace.Models.YourDBClass" Order="1" Enabled="True">
      <Destination Path="your-connection-string-goes-here" />
      <Object Type="DbCodeFirst">
        <Source Path="DBMigration" DbContext="Namespace.Models.YourDBClass, AssamblyName" MigrationConfiguration="Namespace.Migrations.Configuration, Assambly" Origin="Convention" />
      </Object>
    </ObjectGroup>
  </Objects>
</PublishDatabaseSettings>
Run Code Online (Sandbox Code Playgroud)

通过继承 DbContext 的类更改 Namespace.Models.YourDBClass,更改 Namespace.Migratins.Configuration 以适合您的迁移配置命名空间,并使用您的 Assambly 名称更改 Assambly。

保存并打开发布向导,您将看到该复选框。