Dapper versión 1.12.0.0 parámetro XML ya no funciona

c# dapper

Pregunta

Al pasar una cadena xml a través de dapper a SQL Server 2008, dapper parece estar creando un parámetro para cada uno de los caracteres en la cadena xml.

Por ejemplo, si la cadena es <outer></outer> , parece estar creando un parámetro para cada carácter ('<', 'o', 'u', 't', etc.)

En la versión anterior, el código pasaba un parámetro (es decir, el parámetro xml que se había especificado) al procedimiento almacenado.

El código de configuración se ve así:

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
);

Mis preguntas son las siguientes: ¿Alguien más puede reproducir esto? Si es así, ¿fue este cambio intencional o un error? ¿Hay alguna solución para lograr el paso del parámetro xml?

El SQL generado se ve así:

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

Cualquier ayuda sería muy apreciada.

Respuesta aceptada

Históricamente, DbType.Xml había sido secuestrado internamente para representar algo diferente. Esto es problemático Básicamente, cuando hice la expansión de parámetros ( where Id in @ids ) funcionaba en DynamicParameters , rompió xml.

Ahora he creado una forma diferente de representar esto y empujé la fuente actualizada a google-code y github. Si usa el código actualizado, debería funcionar bien. Aún no he implementado NuGet, avíseme si lo necesita.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow