Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将参数值从HashSet`1转换为IEnumerable`1_C#_Sql Server_Entity Framework Core - Fatal编程技术网

C# 无法将参数值从HashSet`1转换为IEnumerable`1

C# 无法将参数值从HashSet`1转换为IEnumerable`1,c#,sql-server,entity-framework-core,C#,Sql Server,Entity Framework Core,我在存储过程中有一个用户定义的值类型参数,我可以成功运行存储过程,但在从代码调用它时,我收到了这个错误 无法将参数值从HashSet1转换为IEnumerable1 我尝试过另一个类似的问题,但没有找到任何解决方案。请帮我解决这个问题 存储过程 CREATE OR ALTER PROCEDURE UpdateRole @BusinessId INT, @Id INT, @Name NVARCHAR(500)=NULL, @Description NVARCHAR(500)=NULL, @IsA

我在存储过程中有一个用户定义的值类型参数,我可以成功运行存储过程,但在从代码调用它时,我收到了这个错误

无法将参数值从HashSet1转换为IEnumerable1

我尝试过另一个类似的问题,但没有找到任何解决方案。请帮我解决这个问题

存储过程

CREATE OR ALTER PROCEDURE UpdateRole
@BusinessId INT,
@Id INT,
@Name NVARCHAR(500)=NULL,
@Description  NVARCHAR(500)=NULL,
@IsActive BIT=NULL,
@FeatureIds AS dbo.ParameterList READONLY
AS


IF NOT EXISTS (SELECT 1 FROM Business WHERE Id = @BusinessId)
    THROW 50000, N'Business not found', 1;

IF NOT EXISTS (SELECT 1 FROM [Role] WHERE Id = @Id and BusinessId=@BusinessId)
    THROW 50001, N'Role not found', 1;

IF EXISTS(
SELECT *
FROM @FeatureIds fi
LEFT JOIN Feature f ON fi.parameter = f.Id
WHERE f.Id is NULL)
    THROW 50002, N'Feature not found', 1;

IF( (SELECT DISTINCT count(*)
                FROM BusinessPersona bp
                INNER JOIN Persona p ON bp.PersonaId = p.Id
                INNER JOIN Business b ON bp.BusinessId = b.Id
                INNER JOIN BusinessFeatureSet bfs ON b.Id = bfs.BusinessId
                INNER JOIN FeatureSet fs ON bfs.FeatureSetId = fs.Id
                INNER JOIN FeatureSetFeature fsf ON fs.Id = fsf.FeatureSetId
                INNER JOIN Feature f ON fsf.FeatureId = f.Id
                INNER JOIN @FeatureIds fi on fi.parameter=f.Id
                WHERE bp.BusinessId = @BusinessId)<(select count(*) from @FeatureIds)
)
THROW 50003, N'Forbidden Access', 1;

    BEGIN TRY
        BEGIN TRANSACTION TRAN_UPDATE_ROLE

            UPDATE [ROLE] SET
            [Name]=@Name,
            [IsActive]=@IsActive,
            [Description]=@Description,
            ModifiedDate = GETUTCDATE()
            WHERE Id=@Id
            AND
            (
                ISNULL([Name],'')!= COALESCE(@Name, [Name], '') or
                ISNULL([Description],'')!=COALESCE(@Description, [Description], '') or
                [IsActive]!=COALESCE(@IsActive,IsActive,'')
            );

            DELETE FROM RoleFeature where RoleId=@Id;

            INSERT INTO RoleFeature (RoleId, FeatureId)
             SELECT DISTINCT  @Id, f.Id 
                FROM BusinessPersona bp
                INNER JOIN Persona p ON bp.PersonaId = p.Id
                INNER JOIN Business b ON bp.BusinessId = b.Id
                INNER JOIN BusinessFeatureSet bfs ON b.Id = bfs.BusinessId
                INNER JOIN FeatureSet fs ON bfs.FeatureSetId = fs.Id
                INNER JOIN FeatureSetFeature fsf ON fs.Id = fsf.FeatureSetId
                INNER JOIN Feature f ON fsf.FeatureId = f.Id
                INNER JOIN @FeatureIds fi on fi.parameter=f.Id
                WHERE bp.BusinessId = @BusinessId

        

        COMMIT TRANSACTION;

    END TRY
    BEGIN CATCH
    THROW 
    print 'rollback'
    ROLLBACK TRANSACTION;
    END CATCH

Go
代码

执行下面的方法后,我得到

无法将参数值从HashSet1转换为IEnumerable1


此错误

并且该错误实际上表示HashSet`1而不是特定类型?是的,它表示无法将参数值从HashSet1转换为IEnumerable1。问题可能出在GetBusinessesQueries.FromSqlRaw中,此处未提供此问题。还请提供完整的堆栈跟踪以及异常消息。它只是一个虚拟数据库集公共虚拟数据库集GetBusinessQueries{get;set;}您是否尝试将updateRole.RoleFeatures转换为数据表?
public async Task UpdateRole(Role updateRole)
    {
        var parameters = new List<SqlParameter>
        {
            new SqlParameter("@BusinessId", updateRole.BusinessId),
            new SqlParameter("@Id", updateRole.Id),
            new SqlParameter("@Name", updateRole.Name),
            new SqlParameter("@Description", updateRole.Description ?? (object)DBNull.Value),
            new SqlParameter("@IsActive", updateRole.IsActive ?? (object)DBNull.Value),
            new SqlParameter
            {
                SqlDbType=SqlDbType.Structured,
                Direction=ParameterDirection.Input,
                ParameterName="@FeatureIds",
                TypeName="[dbo].[ParameterList]",
                Value=updateRole.RoleFeatures
            },
        };

        await GetBusinessesQueries.FromSqlRaw("EXEC UpdateRole @BusinessId, @Id, @Name, @Description, @IsActive, @FeatureIds",
            parameters.ToArray()).ToListAsync();
    }