了解 SqlMapper.ICustomQueryParameter

naw*_*fal 5 c# sql-server table-valued-parameters dapper

当必须使用 Dapper 将数据表作为 TVP 传递给 DB 时DataTable.AsTableValuedParameter,返回 a的方法有什么意义SqlMapper.ICustomQueryParameter

我可以像普通数据表一样将 TVP 发送到 DB 并执行查询就好了。我不确定AsTableValuedParameter在它上面执行什么额外购买。

例如,这有效:

int rowsAffected = await conn.ExecuteAsync(
    "MyProc",
    new
    {
        myVar = (DataTable)GetThatDataTable(),
    },
    commandType: CommandType.StoredProcedure);
Run Code Online (Sandbox Code Playgroud)

另外,还有一个问题,方法中的typeName可选参数需要什么AsTableValuedParameter?没有它也能正常工作。

Mar*_*ell 4

它在您的情况下工作正常,因为您正在使用存储过程;用户定义的类型需要来自某处,并且在存储过程的情况下:该某处可以是声明的参数类型。

然而,dapper 也适用于即席CommandText查询。在这种情况下,如果没有此调用:没有类型 name,并且调用将失败。对我来说重要的是功能CommandText也支持使用,因为这是一个非常常见的用例。

如果它对你来说没有问题:那就这样做!