我的web應用程序具有自行安裝過程;它會(正確)檢測到數據庫未初始化並初始化(通過遷移);我還有自動化的集成測試,可以測試這些情況下的安裝工作情況,並進行煙霧測試登錄並註冊第一個用戶(安裝表單提供)。WebSecurity.Initialized爲true,但表格不存在
我最近從MVC3切換到MVC4。我使用了內置存儲提供者(在MVC3中,aspnet_*
表;在MVC4中,WebSecurity
與UserProfile
表)。
而不是手動運行.SQL文件中的所有MVC3存儲過程,我現在撥打電話WebSecurity.InitializeDatabaseConnection
。事實上,我的代碼片段:
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("ApplicationServices", "UserProfile", "UserId", "UserName", true);
MigrationsWrapper.MigrateToLatestVersion(); // wrapper around migratordotnet
}
不幸的是,我發現了一個有趣的「錯誤」。當我編譯我的服務器代碼並運行我的安裝測試時,它會在全新安裝(空數據庫)後通過(如預期的那樣)。如果我立即再次運行測試,它會失敗。
失敗的原因?在我的安裝測試中,我覈對了所有的數據庫表,並期望安裝來重新創建它們。但是,在這種情況下,WebSecurity.Initialized
返回true而不是false。所以,我從來沒有打到第二行(初始化和創建表)。如果我把這條線移到外面,我會得到一個異常,我正在進行雙重初始化。
不幸的是,我真正需要的是像WebSecurity.CreateTables()
這樣的方法,它不存在。因此,我陷入了僵局。我該如何處理?
另外,如果我嘗試重新創建UserProfile
表我自己,我碰到的問題與UserId
(主鍵)插入爲空 - 大概是因爲我錯過了其他表。
我應該如何處理這種情況?