现在(n Dapper 1.26和更高版本)直接支持烘焙到精巧的表值参数。对于存储过程,由于数据类型内置于sproc API中,因此您需要做的就是提供DataTable
:
var data = connection.Query<SomeType>(..., new {
id=123, name="abc", values = someTable
}, ...);
对于直接命令文本,您还有两个选项:
使用辅助方法告诉它自定义数据类型:
var data = connection.Query<SomeType>(..., new {
id=123, name="abc", values = someTable.AsTableValuedParameter("mytype")
}, ...);
告诉data-table本身要使用的自定义数据类型:
someTable.SetTypeName("mytype");
var data = connection.Query<SomeType>(..., new {
id=123, name="abc", values = someTable
}, ...);
任何这些应该工作正常。
今天不是。我们实际上为我们厚颜无耻的“in”实现( where col in @values
)调查了table-valed-parameters,但是对性能非常where col in @values
。然而,在SPROC的背景下,它是有道理的。
您最好的办法是将此项记录为项目网站上的问题,以便我们跟踪/确定其优先级。听起来有点可行,可能类似于DbString或DynamicParameters选项。
但今天?没有。