Dapper版本1.12.0.0 XML参数不再有效

时间:2012-10-15 19:34:39

标签: c# dapper

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

例如,如果字符串为<outer></outer>,则表明它正在创建参数 对于每个角色('&lt;','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, ...)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

历史上,DbType.Xml被内部劫持以代表不同的东西。这是有问题的。基本上,当我在where Id in @ids中进行参数扩展(DynamicParameters)时,它会破坏xml。

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