当我尝试通过Dapper将表作为参数传递给存储过程时,我发现这个SO答案,它指出Dapper直接支持此功能。
然而,在.NET Core中,似乎没有实现DataTable,因此这种方法不起作用。
是否有另一种简单的方法可以使用Dapper将自定义/用户定义的表作为参数传递给存储过程?
然而,在.NET Core中,似乎没有实现DataTable,因此这种方法不起作用。
是否有另一种简单的方法可以使用Dapper将自定义/用户定义的表作为参数传递给存储过程?
目前,您需要为每个表值类型创建一个实现SqlMapper.IDynamicParameters的类。
修改后的示例(未测试)
http://todothinkofname.net/2016/05/30/Dapper-with-Net-core/
public class ParameterTvp : SqlMapper.IDynamicParameters
{
private readonly IEnumerable<string> _parameters;
public ParameterTvp(IEnumerable<string> parameters)
{
_parameters = parameters;
}
public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
{
var sqlCommand = (SqlCommand) command;
sqlCommand.CommandType = CommandType.StoredProcedure;
var items = new List<SqlDataRecord>();
foreach (var param in _parameters)
{
var rec = new SqlDataRecord(new SqlMetaData("Parameter", SqlDbType.NVarChar, 100));
rec.SetString(0, param);
items.Add(rec);
}
var p = sqlCommand.Parameters.Add("@param", SqlDbType.Structured);
p.Direction = ParameterDirection.Input;
p.TypeName = "ParameterTableType";
p.Value = items;
}
}
使用方法
using (var connection = new SqlConnection(connectionString))
{
var parameters = new ParameterTvp(new List<string>() { "XXXXXXXX" });
connection.Execute("test", parameters);
}