将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, ...)
非常感谢任何帮助。
答案 0 :(得分:4)
历史上,DbType.Xml
被内部劫持以代表不同的东西。这是有问题的。基本上,当我在where Id in @ids
中进行参数扩展(DynamicParameters
)时,它会破坏xml。
我现在创建了一种不同的表示方式,并将更新后的源代码推送到google-code和github。如果您使用更新的代码,它应该可以正常工作。我还没有部署NuGet - 如果你需要,请告诉我。