2

我一直在這個頭上幾個小時,但似乎無法弄清楚什麼是錯的。SQL Azure意外的數據庫刪除/娛樂


這是我們的項目基本設置:

  • MVC 3.0項目與ASP.NET成員
  • 實體框架4.3,代碼優先的方法
  • 本地環境:本地SQL Server與2 MDF數據庫文件附帶(aspnet.mdf + entities.mdf)
  • 服務器環境:Windows Azure + 2 SQL Azure數據庫(aspnet和實體)


這就是我們所做的:

  • 創建本地和遠程數據庫,使用調試模式和SQL Azure的連接字符串SQLEXPRESS連接字符串在釋放模式修改的web.config
  • 創建SampleData類延伸DropCreateDatabaseAlways<Entities>Seed方法種子數據。
  • 已使用System.Data.Entity.Database.SetInitializer(new Models.SampleData());Application_Start將種子數據導入我們的數據庫。
  • 在本地運行應用程序 - 表已創建並播種,一切正常。
  • 已部署,運行遠程應用程序 - 表已創建並播種,一切正常。
  • 新增預處理器指令,停止破壞,在每個應用程序的實體數據庫開始對我們的遠程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表中,使用鑑別器來知道加載各個類時要從哪一列進行加載
    • 儘管在今天之前加載進行得很好,但它現在不再存在。我們得到了以下錯誤消息:

      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表中的列FooFoo1。邏輯不夠,因爲SuperClass有2個小類SubClass1SubClass2,每個具有Foo屬性。在我們的示例中,Foo爲NULL,但Foo1的值爲int32。所以問題不在於數據庫 - 相反,我們的模型和數據庫之間的鏈接似乎已經丟失。鑑別器邏輯被破壞。
  • 試圖找到能夠做什麼出了錯跡象,我們注意到幾件事情:

    • 儘管我們從來沒有在SQL Azure的實體數據庫上執行任何遷移,數據庫現在有一個_MigrationHistory
    • _MigrationHistory表具有一個記錄:

      MigrationID: 201204102350574_InitialCreate 
      CreatedOn: 4/10/2012 11:50:57 PM 
      Model: <Binary data> 
      ProductVersion: 4.3.1 
      
    • 在澳展望其他桌子,其中大部分都在這次遷移發生時被清空。只有最初播種SampleData的表格保持不變。

    • 簽入SQL Azure管理門戶,我們的實體數據庫顯示以下創建日期:4/10/2012 23:50:55。


這裏是我們的理解

  • 出於某種原因,SQL Azure中刪除並重新創建我們的數據庫
  • 的_MigrationHistory表是在過程中產生的,註冊一個起點針對未來遷移測試模型


這是我們的問題

  • 誰/什麼觸發數據庫刪除/休閒?
  • 因爲Application_StartSystem.Data.Entity.Database.SetInitializer<Entities>(null);?EF如何重新播種我們的樣本數據?

編輯:望着能夠做什麼出了錯,我們注意到一兩件事,我們並沒有在這個SQL Azure的tutorial尊重:我們沒有從我們的SQL Azure的實體數據庫連接刪除PersistSecurityInfo數據庫創建後的字符串。看不出爲什麼在地球上它可能會導致問題,但仍值得一提...

+0

我有類似的經驗,當我登錄到SQL管理門戶時,我的數據庫消失了。我仍然不知道這是怎麼發生的。在我的應用產品發佈後,我必須留意... – 2012-06-12 14:41:47

回答

0

沒關係,找到我們的問題的原因。如果有人想知道:自從添加了預處理器指令後,我們還沒有進行任何Azure部署。 MS必須重新啓動虛擬機所在的機器,新虛擬機使用查看數據重新創建數據庫。

獲得的經驗:總是頻繁地進行Azure部署。