在.NET Core中将表格作为输入参数传递给Dapper

7
当我尝试通过Dapper将表作为参数传递给存储过程时,我发现这个SO答案,它指出Dapper直接支持此功能。
然而,在.NET Core中,似乎没有实现DataTable,因此这种方法不起作用。
是否有另一种简单的方法可以使用Dapper将自定义/用户定义的表作为参数传递给存储过程?

1
这个回答解决了你的问题吗?如何在.NET Core中向Dapper传递表值参数? - TylerH
2个回答

4

目前,您需要为每个表值类型创建一个实现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);
  }

这是 stack 上的另一个例子:https://dev59.com/N1gR5IYBdhLWcg3wm-O6 - bbsimonbb
你能把链接资源中的一些示例代码移植到这里吗? - VMAtm
@VMAtm 我添加了一个修改过的代码示例,来自那个链接。 - William Xifaras

0

你应该可以像这样传入一个 IEnumerable<SqlDataRecord>类似这样。它在 System.Data 中,并且没有被弃用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接