私は何時間も頭を悩まされていますが、何が間違っているのか分からないようです。 2 MDFを使用してローカルのSQL Server:ASP.NETメンバーシップ SQL Azureの予期しないデータベースの削除/再作成
- MVC 3.0プロジェクト:
は、ここに私たちのプロジェクトの基本的な設定です(aspnet.mdf + entities.mdf) - サーバー環境:Windows Azure + 2 SQL Azureデータベース(aspnetおよびエンティティ) ここで
は、私たちがやったことだ:作成したリリースモードでローカルおよびリモート・データベースを作成し
- 、デバッグモードでSQLEXPRESSの接続文字列を使用するように変更web.configファイルとSQL Azureの接続文字列
- データをシードする方法は、
SampleData
クラスをDropCreateDatabaseAlways<Entities>
に拡張してSeed
の方法で行う。 Application_Start
にSystem.Data.Entity.Database.SetInitializer(new Models.SampleData());
を使用して、データベースにデータをシードします。- ローカルにRanアプリが作成され、シードされました。すべてOKです。
- デプロイされ、実行されたリモートアプリケーションテーブルが作成され、シードされました。すべてOKです。私たちのリモートAzureの環境に開始する各アプリケーションでエンティティデータベースを破壊停止するプリプロセッサディレクティブを追加しました
:それは醜い
- を得たところ
#if DEBUG System.Data.Entity.Database.SetInitializer(new Models.SampleData()); #else System.Data.Entity.Database.SetInitializer<Entities>(null); #endif
はここですNuGetを使用した移行を有効にしました。AutomaticMigrationsEnabled = true;
- を得たところ
- すべてがスムーズで素敵でした。私たちは、
今日数日のために調理し、それを残し、我々は、Azureの環境上の未知のバグに気づいた:
- 我々はスーパー
SuperClass
- 対応するエンティティテーブルストアからこれらのすべてを導出するいくつかのクラスを持っています同じ
SuperClass
テーブル内のオブジェクト。さまざまなクラスをロードするときに、どの列をフィードするかを判別するためにディスクリミネータを使用します。 今日はロードされていますが、これ以上はありません。私たちの
SuperClass
表は列Foo
とFoo1
を持って簡単にチェック、後The 'Foo' property on 'SubClass1' could not be set to a 'null' value. You must set this property to a non-null value of type 'Int32'.
- :私たちは、次のエラーメッセージが表示されます。論理的には、
SuperClass
は2つのサブクラスSubClass1
とSubClass2
を持ち、それぞれがFoo
というプロパティを持っているため、十分です。この場合、Foo
はNULLですが、Foo1
の値はint32
です。だから、問題はデータベースではなく、モデルとデータベースの間のリンクが失われているように見えます。弁別論理が壊れていた。 間違っていたかもしれない何の兆候を見つけようとして
- 我々はスーパー
、我々はいくつかのことに気づいた:私たちはSQL Azureのエンティティのデータベース上の任意の移行を行ったことがないにもかかわらず
- 、データベースは現在
_MigrationHistory
を持っていますOを見てみるとMigrationID: 201204102350574_InitialCreate CreatedOn: 4/10/2012 11:50:57 PM Model: <Binary data> ProductVersion: 4.3.1
:テーブル
_MigrationHistory
テーブルには、一つのレコードを持っていますこれらのテーブルは、この移行が発生したときにほとんどが空になりました。最初にSampleData
でシードされたテーブルのみが変更されませんでした。- SQL Azure管理ポータルで確認すると、Entityデータベースは次の作成日を示します。2012/04/10 23:50:55。ここで
- 、データベースは現在
我々の理解は、何らかの理由で
- で、SQL Azureが_MigrationHistoryテーブルが出発点を登録し、その過程で作成された
- 私達のデータベースを削除して再作成将来の移行のためにモデルをテストします。
は、私たちの質問
- データベースの削除/レクリエーションをトリガ何/ですか?
Application_Start
にSystem.Data.Entity.Database.SetInitializer<Entities>(null);
があるので、EFはサンプルデータをどのように再シードできますか?
EDIT:は間違っていたかもしれないものを見て、私たちは、このSQL Azureのtutorialに尊重していなかった一つのことに気づいた:私たちはSQL Azureのエンティティのデータベース接続からPersistSecurityInfo
を削除しませんでしたデータベースが作成された後の文字列。なぜ地球上で問題を引き起こしたのか分かりませんが、それでも言及する価値はありません...
SQL管理ポータルにログインしてもデータベースが消滅したのと同じような経験がありました。私はまだそれがどうなったのか分かりません。私は私のアプリの生産開始後に注意しなければならない... –