2

私は何時間も頭を悩まされていますが、何が間違っているのか分からないようです。 2 MDFを使用してローカルのSQL Server:ASP.NETメンバーシップ SQL Azureの予期しないデータベースの削除/再作成

  • Entity Frameworkの4.3、コードファーストアプローチ
  • ローカル環境と

    • MVC 3.0プロジェクト:


      は、ここに私たちのプロジェクトの基本的な設定です(aspnet.mdf + entities.mdf)

    • サーバー環境:Windows Azure + 2 SQL Azureデータベース(aspnetおよびエンティティ)
    • ここで


    は、私たちがやったことだ:作成したリリースモードでローカルおよびリモート・データベースを作成し

    • 、デバッグモードでSQLEXPRESSの接続文字列を使用するように変更web.configファイルとSQL Azureの接続文字列
    • データをシードする方法は、SampleDataクラスをDropCreateDatabaseAlways<Entities>に拡張してSeedの方法で行う。
    • Application_StartSystem.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表は列FooFoo1を持って簡単にチェック、後

        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つのサブクラスSubClass1SubClass2を持ち、それぞれが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_StartSystem.Data.Entity.Database.SetInitializer<Entities>(null);があるので、EFはサンプルデータをどのように再シードできますか?

    EDIT:は間違っていたかもしれないものを見て、私たちは、このSQL Azureのtutorialに尊重していなかった一つのことに気づいた:私たちはSQL Azureのエンティティのデータベース接続からPersistSecurityInfoを削除しませんでしたデータベースが作成された後の文字列。なぜ地球上で問題を引き起こしたのか分かりませんが、それでも言及する価値はありません...

  • +0

    SQL管理ポータルにログインしてもデータベースが消滅したのと同じような経験がありました。私はまだそれがどうなったのか分かりません。私は私のアプリの生産開始後に注意しなければならない... –

    答えて

    0

    私たちの問題の原因が見つかりませんでした。誰かが不思議に思うような場合:プリプロセッサディレクティブを追加して以来Azureの配備は行っていませんでした。 MSがVMが存在するマシンを再起動する必要があり、新しいVMがデータを参照してデータベースを再作成しました。

    教訓:頻繁にAzureを展開してください。

    関連する問題