0

我需要调用aspnet_UsersInRoles_IsUserInRole从ASPNET Membership.Im制作短小精悍的电话是这样的:如何调用aspnet_UsersInRoles_IsUserInRole存储过程小巧玲珑的ORM

public int CheckIfUserIsInRole(IsUserInRole userInRole) 
    { 
     using (var connection = new SqlConnection(ConfigurationSettings.GetConnectionString())) 
     { 
      DynamicParameters param = new DynamicParameters(); 
      param.Add("@UserName", userInRole.UserName); 
      param.Add("@ApplicationName", userInRole.ApplicationName); 
      param.Add("@RoleName", userInRole.RoleName); 

     return connection.Query("aspnet_UsersInRoles_IsUserInRole", param, commandType: CommandType.StoredProcedure).FirstOrDefault();    
     } 
    } 

并在控制器我补充一下:

public int IsUserInRole(IsUserInRole isUserInRole) 
    {    
     var model = _userRepository.CheckIfUserIsInRole(new IsUserInRole() 
     { 
      UserName = "testuser", 
      RoleName = "user", 
      ApplicationName = "USERMANAGEMENT" 
     }); 

     return model; 
    } 

用户存在并且具有正确的作用,但每次返回0. 这里是从AspNet成员的存储过程:

ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_IsUserInRole] 
@ApplicationName nvarchar(256), 
@UserName   nvarchar(256), 
@RoleName   nvarchar(256) 

AS BEGIN DECLARE @ApplicationId唯一标识符 SELECT @ApplicationId = NULL SELECT @ApplicationId =的applicationID FROM aspnet_Applications WHERE LOWER(@ApplicationName)= LoweredApplicationName IF(@ApplicationId IS NULL) RETURN(2) DECLARE @UserId唯一标识符 SELECT @UserId = NULL DECLARE @RoleId唯一标识符 SELECT @RoleId = NULL

SELECT @UserId = UserId 
FROM dbo.aspnet_Users 
WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId = @ApplicationId 

IF (@UserId IS NULL) 
    RETURN(2) 

SELECT @RoleId = RoleId 
FROM dbo.aspnet_Roles 
WHERE LoweredRoleName = LOWER(@RoleName) AND ApplicationId = @ApplicationId 

IF (@RoleId IS NULL) 
    RETURN(3) 

IF (EXISTS(SELECT * FROM dbo.aspnet_UsersInRoles WHERE UserId = @UserId AND RoleId = @RoleId)) 
    RETURN(1) 
ELSE 
    RETURN(0) 

END

我错在哪里? 任何建议如何解决它?

我需要这个存储过程来检查,如果用户是该角色,所以我可以用它来[AuthorizeRoles(“RoleTest”)

回答

0

该存储过程不返回任何记录;它使用返回值代替。这需要作为一个参数进行处理:

public int CheckIfUserIsInRole(IsUserInRole userInRole) 
{ 
    using (var connection = new SqlConnection(ConfigurationSettings.GetConnectionString())) 
    { 
     DynamicParameters param = new DynamicParameters(); 
     param.Add("@UserName", userInRole.UserName); 
     param.Add("@ApplicationName", userInRole.ApplicationName); 
     param.Add("@RoleName", userInRole.RoleName); 
     param.Add("@ReturnValue", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue); 

     connection.Execute("aspnet_UsersInRoles_IsUserInRole", param, commandType: CommandType.StoredProcedure); 

     return param.Get<int>("@ReturnValue"); 
    } 
} 

https://github.com/StackExchange/dapper-dot-net#stored-procedures

(也贴到your copy of this question on CodeProject。)

+0

非常感谢。这解决了问题:) – Tozi