3

当通过 dapper 将 xml 字符串传递到 SQL Server 2008 时,dapper 似乎正在为 xml 字符串中的每个字符创建一个参数。

例如,如果字符串是<outer></outer>它似乎正在为每个字符('<'、'o'、'u'、't'等)创建一个参数。

在旧版本中,代码会将一个参数(即指定的 xml 参数)传递给存储过程。

设置代码如下所示 -

var xml = @"
<OuterElement>
  <InnerElement>1</InnerElement>
  <InnerElement>2</InnerElement>
  <InnerElement>3</InnerElement>
  <InnerElement>4</InnerElement>
</OuterElement>";

var parameters = new Dapper.DynamicParameters();
parameters.Add("@XmlParameter", xml, DbType.Xml); 
SqlMapper.Query(
  connection, 
  "dbo.TestXmlInput", 
  parameters, 
  commandType: CommandType.StoredProcedure, 
  commandTimeout: 60
);

我的问题如下:其他人可以复制吗?如果是这样,此更改是故意的还是错误的?是否有实现 xml 参数传递的解决方法?

生成的 SQL 如下所示:

exec dbo.TestXmlInput (@XmlParameter1, @XmlParameter2, @XmlParameter3, ...)

任何帮助将不胜感激。

4

1 回答 1

4

从历史上看,DbType.Xml曾被内部劫持以代表不同的东西。这是有问题的。基本上,当我使参数扩展 ( where Id in @ids) 起作用时DynamicParameters,它破坏了 xml。

我现在创建了一种不同的表示方式,并将更新的源推送到 google-code 和 github。如果您使用更新的代码,它应该可以正常工作。我还没有部署 NuGet - 如果你需要这个,请告诉我。

于 2012-10-16T05:47:01.563 回答