Я создаю некоторые данные в методе семян. Я создаю несколько пользователей с несколькими разрешениями (роли)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]";
Я создаю запись Userprofile через EF а UnitOfWork Pattern
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. Это очень странно, поскольку он может сопоставить роль первому пользователю (который впервые был пользователем admin, но хотел посмотреть, может ли он создать разрешение для этого пользователя, что он делает)
Затем я удалил ограничение внешнего ключа, чтобы увидеть, что происходит, и на нем помещено 3. Тестирование, повторяя, но добавляя четвертую роль, кажется, что параметры (имя пользователя, роли) неверны!!!? Новая роль имеет 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
Приятно, что вы оставили этот вопрос здесь и ответили на него. Я после 4 часов охоты за то, почему AddUserToRole будет бросать ключевое нарушение. Было бы неплохо, если бы вы могли обновить заголовок вопроса с нарушением ключа, потому что это то, что я сначала ищу, например, как «AddUsersToRole бросает исключение нарушения правил» или что-то в этом роде? – Mateusz