我一直在這個頭上幾個小時,但似乎無法弄清楚什麼是錯的。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
表中的列Foo
和Foo1
。邏輯不夠,因爲SuperClass
有2個小類SubClass1
和SubClass2
,每個具有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的實體數據庫上執行任何遷移,數據庫現在有一個
這裏是我們的理解
- 出於某種原因,SQL Azure中刪除並重新創建我們的數據庫
- 的_MigrationHistory表是在過程中產生的,註冊一個起點針對未來遷移測試模型
這是我們的問題
- 誰/什麼觸發數據庫刪除/休閒?
- 因爲
Application_Start
有System.Data.Entity.Database.SetInitializer<Entities>(null);
?EF如何重新播種我們的樣本數據?
編輯:望着能夠做什麼出了錯,我們注意到一兩件事,我們並沒有在這個SQL Azure的tutorial尊重:我們沒有從我們的SQL Azure的實體數據庫連接刪除PersistSecurityInfo
數據庫創建後的字符串。看不出爲什麼在地球上它可能會導致問題,但仍值得一提...
我有類似的經驗,當我登錄到SQL管理門戶時,我的數據庫消失了。我仍然不知道這是怎麼發生的。在我的應用產品發佈後,我必須留意... – 2012-06-12 14:41:47