我有一个带有3个输入参数的存储过程。
... PROCEDURE [dbo].[gama_SearchLibraryDocuments]
@Keyword nvarchar(160),
@CategoryIds [dbo].[IntList] READONLY,
@MarketIds [dbo].[IntList] READONLY ...
IntList是用户定义的表类型。
CREATE TYPE [dbo].[IntList]
AS TABLE ([Item] int NULL);
我的目标是使用dapper调用此存储过程。
我已经发现了一些关于如何使用dapper传递用户定义类型的例子。其中一个例子是在Dapper.Microsoft.Sql nuget包中实现的TableValuedParameter类。
var list = conn.Query<int>("someSP", new
{
Keyword = (string)null,
CategoryIds = new TableValuedParameter<int>("@CategoryIds", "IntList", new List<int> { }),
MarketIds = new TableValuedParameter<int>("@MarketIds", "IntList", new List<int> { 541 })
}, commandType: CommandType.StoredProcedure).ToList();
上面的代码会抛出异常。
An exception of type 'System.NotSupportedException' occurred in Dapper.dll but was not handled in user code
Additional information: The member CategoryIds of type Dapper.Microsoft.Sql.TableValuedParameter`1[System.Int32] cannot be used as a parameter value
我已经使用一个用户定义的表类型测试了我的存储过程,它运行良好。
conn.Query<int>("someSP", new TableValuedParameter<int>("@MarketIds", "IntList", new List<int> { 541 }), commandType: CommandType.StoredProcedure).ToList();
我需要帮助来运行原始存储过程。 谢谢。