2013-02-12 33 views
1

我的web應用程序具有自行安裝過程;它會(正確)檢測到數據庫未初始化並初始化(通過遷移);我還有自動化的集成測試,可以測試這些情況下的安裝工作情況,並進行煙霧測試登錄並註冊第一個用戶(安裝表單提供)。WebSecurity.Initialized爲true,但表格不存在

我最近從MVC3切換到MVC4。我使用了內置存儲提供者(在MVC3中,aspnet_*表;在MVC4中,WebSecurityUserProfile表)。

而不是手動運行.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(主鍵)插入爲空 - 大概是因爲我錯過了其他表。

我應該如何處理這種情況?

回答

0

我現在唯一的解決辦法就是重置IIS的悲傷,但真實;這樣做會重置WebSecurity.Initialized,一切正常。

因爲我需要在應用程序啓動時,我可以用Process.Start以編程方式重置IIS。

相關問題