3

EF4.1をコードファーストスタイルで使用して、SQL AzureDB'MyAppsDB'で小さなASP.NETMVC3ベースのWebアプリのPOCOオブジェクトを永続化します。テーブルが存在しない場合、テーブルはMyAppsDBに自動的に作成されます。SQL Azureでアプリをホストしたいのですが、50MBのセッション状態を格納するために1GBのDBを追加するために月額$ 10を支払いたくないので、キャッシュを使用するとさらにコストがかかります。

アプリのモデルと一緒にセッション状態をMyAppDBに保存したいと思います。これを行う方法はありますか?EFコードファーストモデルと同じように、Sessionテーブルが存在しない場合に自動作成することはできますか?

web.configを次のように変更してみました。

<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      connectionStringName="MyAppDBContext" applicationName="/" />
  </providers>
</sessionState>

しかし、セッションテーブルが存在しないと文句を言います。セッションテーブルを作成すると、EF4.1はDBメタデータが期待と一致しないと文句を言います。

4

1 に答える 1

2

セッション状態に既存のSQLAzureデータベースを使用することは確かに可能です。私はまさにそれをやっています(そしてまったく同じ理由で)。標準のスクリプトはSQLAzureと互換性がないため、機能しません。DBを設定するために使用した更新されたスクリプトがどこかにあります(どこにあるかは思い出せませんが、Googleを使用します)。

ただし、コードファーストではありません。スキーマをリバースエンジニアリングできる場合もありますが、多くのストアドプロシージャが関係しています。

期限切れのセッションを整理することも検討する必要があることに注意してください。定期的に実行する必要のあるストアドプロシージャがあり(DeleteExpiredSessionsだと思います)、一般的な推奨事項は、ワーカーロールから実行することです。ただし、ストアドプロシージャを定期的に実行することだけを目的として、ワーカーロールをデプロイする必要はありません。

編集:このページでスクリプトを見つけました。メインの記事に投稿されたスクリプトに問題がありますが、PeterMcEvoyからのコメントのページのさらに下に変更されたスクリプトがあることに注意してください。

Azureテーブルストレージセッション状態プロバイダーを優先的に使用することを推奨する人もいます。SQLAzureをまだ使用していない場合は、同意する傾向があります。しかし、Azureプロバイダー(特に開発環境)で問題が発生しましたが、更新されたスクリプトが展開された後は、SQLServerセッション状態を使用してもまったく問題はありませんでした。

編集2:私はさらに進歩しました、そして私はそれを私のブログのために書き、ここにリンクを投稿します。

ただし、ハイライトは次のとおりです。

  • 空のデータベースに対してInstallSqlState.SQLスクリプト(Azure用に変更されたスクリプト)を実行します
  • EF Power Toolsを使用して、ASP状態テーブルをEFコードファーストにリバースエンジニアリングします。
  • リバースエンジニアリングされたクラスをモデルとコンテキストに統合します
  • 画像列タイプを使用するようにASPStateTempSessionsテーブルのマッピングを変更します
  • ストアドプロシージャを作成するだけのInstallSqlState.SQLから新しいSQLスクリプトを作成します
  • 常にデフォルト値を指定するようにストアドプロシージャを変更します
  • Initializer Seed()メソッドでSQLスクリプトを実行するためのコードを追加します

それはそれについてだと思いますが、私がそれを書いたときに私のブログでより完全な説明をします。

編集3:

私の記事のパートIは今私のブログにあります。パートIIはもうすぐです(しかし、今は寝る時間です)。

編集4:

パートIIも書かれています。

于 2011-08-10T18:29:27.517 に答える