我在種子方法中創建了一些數據。我創建了幾個用戶的幾個權限(角色)Roles.AddUserToRole在給定相同用戶名的情況下找到不同的userId
WebSecurity.InitializeDatabaseConnection("MibContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);
Roles.CreateRole(Constants.Roles.Administrator);
Roles.CreateRole(Constants.Roles.ContentManager);
Roles.CreateRole(Constants.Roles.KeyAccountManager);
然後我有變量的用戶名(以避免任何錯字可能性)
var adminusername = "[email protected]";
var userusername = "[email protected]";
我通過EF和創建USERPROFILE紀錄的UnitOfWork模式
var admin = new UserProfile
{
FirstName = "Admin",
LastName = "Account",
UserName = adminusername
};
unitOfWork.UserRepository.Insert(admin);
unitOfWork.Save();
然後創建用戶會員賬號,並分配角色:
WebSecurity.CreateAccount(adminusername, "123456");
WebSecurity.CreateAccount(userusername, "123456");
Roles.AddUserToRole(userusername, Constants.Roles.Administrator);
Roles.AddUserToRole(userusername, Constants.Roles.KeyAccountManager);
最後的角色命令導致錯誤,UsersInRoles和UserProfile之間的外鍵衝突。這是非常奇怪的,因爲它可以將角色映射到第一個用戶(這是管理員用戶第一次使用,但想要查看它是否可以爲該用戶創建權限,它會這樣做)
然後,我刪除了外鍵約束來查看發生了什麼,並在其中放置了3。通過重複測試但添加第4個角色,似乎(用戶名,角色)參數是錯誤的方法!?!?新角色的Id = 4,並重複測試,這是它放在UserId列。
RoleId UserId
2 1
2 4
NULL NULL
角色配置:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider"
type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
</providers>
</roleManager>
我缺少的東西?
SQL事件探查顯示了此命令: INSERT INTO webpages_UsersInRoles VALUES(4,1); 這是我放入方法的順序,但該表首先由ROLE創建,而不是用戶。如果他們已經把字段名稱,它會很好地工作。 – Simon
很高興你在這裏留下了這個問題並回答了它。爲了AddUserToRole爲什麼會拋出重要違規,我在4個小時的追捕之後。如果你可以更新密鑰違規問題的標題,那將會很好,因爲那是我首先搜索的內容,比如「AddUsersToRole引發密鑰違規異常」或類似的內容? – Mateusz