5

EntityFramework5.0とCodeFirstを使用するASP.NETMVCアプリケーションがあります。

VisualStudio2012を使用して自分のWebサイトをAzureWebサイトに公開しました。シードデータがSQLAzureに挿入されないことを除いて、すべてが機能しているようです。ウェブサイトは機能し、データベースは構築されますが、シードデータは挿入されません。これをローカルマシンで実行すると、すべてが正しく機能します。

私が見た例に基づくと、Visual Studio 2012から公開する場合、「コードの最初の移行を実行する」というオプションがあります(下の画像を参照)。

ここに画像の説明を入力してください

しかし、自分のWebサイトを公開しようとすると、「コードの最初の移行を実行する」オプションが使用できません。 ここに画像の説明を入力してください

これは、私のソリューションの構成方法と関係があると思います。アプリケーションを構成する3つのプロジェクトがあります。

  • Webサイト–これはASP.NETMVCプロジェクトです。参照エンティティフレームワークがありますが、すべてのデータアクセスコード(DBContext)はデータプロジェクトにあります
  • ドメイン–これはクラスライブラリです。EntityFrameworkへの参照はありません
  • データ–このプロジェクトはEntityFrameworkを参照しています。DbMigrationsConfigurationから継承するConfigurationクラスがあります。このConfigurationクラスでは、Seedメソッドをオーバーライドします。

繰り返しますが、これはすべて私のローカルPCで機能します。ほとんどの場合、すべてがAzureで機能します。Webサイトは機能し、データベースは構築されますが、シードデータは挿入されません。

私のシナリオでは、Visual Studio2012から公開するときにシードデータを取得してSQLAzureに挿入する方法に関する推奨事項はありますか?

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 に答える