2012-12-25 42 views
3

我想要使用ASP.NET MVC 4和實體框架5在我的SQL Azure數據庫中創建成員角色。我可以在本地主機上正常工作,但似乎並未在Azure上創建帳戶或成員角色。請注意,我也使用流利NHibernate,但我相信這是不相關的。使用實體框架在Windows Azure中註冊成員資格

在我的Application_Start()函數我初始化數據庫,以確保所有的表都存在:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

我還創建了一個SeedMembership()函數(在遷移\配置的種子()函數調用。 CS)看起來像這樣:

private void SeedMembership() 
    { 
     WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

     var roles = (SimpleRoleProvider)Roles.Provider; 
     var membership = (SimpleMembershipProvider)Membership.Provider; 

     if (!roles.RoleExists("Administrator")) 
     { 
      roles.CreateRole("Administrator"); 
     } 
     if (membership.GetUser("TestAccount", false) == null) 
     { 
      membership.CreateUserAndAccount("TestAccount", "testpwd"); 
     } 
     if (!roles.GetRolesForUser("TestAccount").Contains("Administrator")) 
     { 
      roles.AddUsersToRoles(new[] { "TestAccount" }, new[] { "Administrator" }); 
     } 
    } 

在包管理器控制檯中使用update-database我可以看到正在調用Seed方法。我甚至跑使用的實際SQL Azure的連接字符串命令:

PM> Update-Database -StartUpProjectName "MyProject" -ConnectionString "Data Source=tcp:myDB.database.windows.net,1433;Initial Catalog=myDB;User [email protected];Password=myPwd" -ConnectionProviderName "System.Data.SqlClient" 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Applying code-based migrations: [201212251057032_Initial]. 
Applying code-based migration: 201212251057032_Initial. 
Running Seed method. 
PM> 

但即使這樣我的「管理員」賬戶未建立。我知道,因爲我在視圖中添加一個檢查:

@if(User.IsInRole("Administrator")) 
{ 
    <li>@Html.ActionLink("Admin", "Index", "Admin")</li> 
} 

而「管理」鏈接一直沒有出現在Azure上嘗試的時候,但在本地工作得很好。

有沒有辦法讓我解決發生了什麼事?我甚至試圖正確嗎?

回答

2

經過幾天的故障排除和拔毛後,我得到了這個工作。我通過在App_Start()中添加來自SeedMembership()的檢查來修復它。根據Interweb和Visual Studio,Seed()函數在部署時被調用,但這不是我所見過的。

相關問題