2013-02-13 4 views
0

Я создаю страницу «Управление ролями» - администратором с помощью стандартной функции WebSecurity.Ошибка SQL: значение внешнего ключа не может быть вставлено, потому что соответствующее значение первичного ключа не существует

Я получаю эту ошибку

Foreign key value cannot be inserted because a corresponding primary key value does not exist. [Foreign key constraint name = fk_UserId]

на следующей строке кода:

if(!Roles.IsUserInRole(userNames[0], roleNames[0])){ 
     Roles.AddUsersToRoles(userNames, roleNames); 
} 

Мое понимание, что отдельные таблицы должны быть связаны с userId колонке. И они. Я использую WebMatrix 2 и Razor для разработки.

Любые идеи или решения от вас SQL Masterminds? Большое спасибо!

Ниже приведен фрагмент кода, как я это делаю!

@{ 
    var roleName = ""; 
    string[] userNames = new string[1]; 
    string[] roleNames = new string[1]; 

    var db = Database.Open("ResearchA"); 
    var selectQueryString = "SELECT UserId, username FROM [usernames]"; 

    if(IsPost){ 

    // Create new role 
    if(!Request["buttonCreateRole"].IsEmpty()){ 
     roleName=Request["textRoleName"]; 

     if(!Roles.RoleExists(roleName) && !roleName.IsEmpty()){ 
     Roles.CreateRole(roleName); 
     } 
    } 

    // Delete role 

    if(!Request["buttonDeleteRole"].IsEmpty()){ 
     roleName=Request["textRoleName"]; 

     if(Roles.GetUsersInRole(roleName).Length == 0 && !roleName.IsEmpty()){ 
     Roles.DeleteRole(roleName, true); 
     } 
    } 

    // Add user to role 

    if(!Request["buttonAddUserToRole"].IsEmpty()){ 
     userNames[0] = Request["selectUserName"]; 
     roleNames[0] = Request["selectRoleName"]; 

     if(!Roles.IsUserInRole(userNames[0], roleNames[0])){ 
     Roles.AddUsersToRoles(userNames, roleNames); 
     } 
    } 

    // Delete user from role 

    if(!Request["buttonDeleteUserFromRole"].IsEmpty()){ 
     userNames[0] = Request["selectUserName"]; 
     roleNames[0] = Request["selectRoleName"]; 

     if(Roles.IsUserInRole(userNames[0], roleNames[0])){ 
     Roles.RemoveUsersFromRoles(userNames, roleNames); 
     } 
    } 
    } 
} 
+0

вы можете отправить больше информации, как доза Роли.AddUsersToRoles работает? кажется, что AddUsersToRoles должен принимать пользователя не userName и role [] not roleNames или что-то в этом роде. как это реализовано? –

+0

Я _guessing_ один из элементов в 'userNames' не существует в базе данных (в таблице users), поэтому нарушится FOREIGN KEY в таблице соединений (которая соединяет пользователей и роли). –

+0

Кроме того, вы _checking_ только первый пользователь/роль, но _adding_ потенциально несколько пользователей для нескольких ролей. Это намеренно? –

ответ

0

Не уверен, но похоже, что вы пытаетесь создать таблицы пользователя и роли вручную.

Вы пытались запустить aspnet_regsql.exe? Вы можете найти его в своем каталоге «% WINDIR% \ Microsoft.NET \ Framework \ v4.0.30319 \». Он откроет мастер для создания соответствующих таблиц с использованием сценариев SQL в том же каталоге «% WINDIR% \ Microsoft.NET \ Framework \ v4.0.30319 \».

+0

Спасибо, Брайан. Я разместил соответствующий фрагмент кода выше, на случай, если вы сможете что-то сделать. – QEx