在我的項目中,我使用WebSecurity和EF代碼優先遷移。WebSecurity.InitializeDatabaseConnection不配合代碼優先遷移
我有我的自定義UserProfile類我想與WebSecurity結合。
我想要種子用戶在Seed方法的遷移配置類中。
所以我試試這個:
#1)
if (!Roles.RoleExists("admin"))
Roles.CreateRole("admin");
if (!WebSecurity.UserExists(AdminUserName))
WebSecurity.CreateUserAndAccount(
AdminUserName,
"admin",
new {Email = "[email protected]"});
但抱怨說我應該先打電話WebSecurity.InitializeDatabaseConnection。
好的,這是有道理的。所以我添加以下行到我的Global.asax:
#2)
WebSecurity.InitializeDatabaseConnection(
_connectionStringName,
"UserProfiles",
"Id",
"UserName",
autoCreateTables: true);
但比下面幾行:
#3)
var dbMigrator = new DbMigrator(_configuration);
dbMigrator.Update();
拋出錯誤:
There is already an object named 'UserProfiles' in the database.
那麼,這又是有道理的遷移嘗試創建剛剛由WebSecurity創建的表。
我發現了一個解決方法:我把#2)放在#1的右上方)。比它的工作。
- 遷移創建的UserProfiles表
- WebSecurity連接到現有的UserProfiles表,創建它需要
- 種子工程,因爲他們發現所需的表及WebSecurity被初始化其他表。
問題是我必須初始化種子方法內的WebSecurity,這是有點臭。
我的問題是如何將WebSecurity.InitializeDatabaseConnection移回Global.asax?
您的網站應該在有限的操作系統和運行大tabase特權。如果沒有,那麼黑客有可能使用漏洞修改存儲過程,觸發器等。因此,數據庫遷移(操作數據庫的模式)應該可以在Web應用程序進程之外使用特權帳戶完成。我知道它並不總是可能的(又名託管解決方案),但是要牢記這些風險。 – bloudraak