C# 无法将参数值从HashSet`1转换为IEnumerable`1
我在存储过程中有一个用户定义的值类型参数,我可以成功运行存储过程,但在从代码调用它时,我收到了这个错误 无法将参数值从HashSet1转换为IEnumerable1 我尝试过另一个类似的问题,但没有找到任何解决方案。请帮我解决这个问题 存储过程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
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();
}