2013-02-13 2 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]

받고 있어요 : 개별 테이블이 userId 칼럼과 연결되어야한다는

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

나의 이해는. 그리고 그들은. 나는 개발을 위해 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

더 많은 정보를 보내면 Roles.AddUsersToRoles가 어떻게 작동합니까? AddUsersToRoles는 userName이 아니라 roleNames가 아닌 role []이 아닌 사용자를 취해야합니다. 어떻게 구현됩니까? –

+0

'userNames'의 요소 중 하나가 (사용자 테이블의) 데이터베이스에 존재하지 않으므로 사용자와 역할을 연결하는 접합 테이블의 외부 키가 위반됩니다. –

+0

또한 첫 번째 사용자/역할 만 확인하고 잠재적으로 여러 사용자를 여러 역할에 추가 할 수 있습니다. 그게 의도적 인거야? –

답변

0

잘 모르겠지만 수동으로 사용자 및 역할 표를 생성하려는 것 같습니다.

aspnet_regsql.exe를 실행 해 보셨습니까? "% WINDIR % \ Microsoft.NET \ Framework \ v4.0.30319 \"디렉토리에서 찾을 수 있습니다. 동일한 "% WINDIR % \ Microsoft.NET \ Framework \ v4.0.30319 \"디렉토리에있는 SQL 스크립트를 사용하여 적절한 테이블을 만드는 마법사가 열립니다.

+0

Thanks Bryan. 위의 코드 조각을 게시했습니다. – QEx