5

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

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

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

在此处输入图像描述

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

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

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

同样,这一切都适用于我的本地电脑。大多数情况下,一切都在 Azure 上运行;网站正常工作,建立数据库,但未插入种子数据。

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

4

1 回答 1

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>

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

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

于 2013-03-06T10:39:03.907 回答