¿Dapper divide los datos XML en una lista de cadenas?

c# dapper orm xml

Pregunta

Una de las cosas que he estado usando apuesto es convertir datos XML provenientes de nuestra base de datos en cadenas y luego deserializarlos dentro del objeto dado de la manera que lo necesito.

Me encontré con algo hoy donde dapper devolvió una lista de cadenas que contienen el XML, solo que se dividió. ¿Esto es intencionado? ¿Debo estar codificando alrededor de esto si estoy esperando que se devuelva una sola cadena de xml?

Así es como estoy llamando al proceso y si ejecuta el proceso, devuelve un solo resultado que contiene datos XML, pero dapper devuelve 2 cadenas en el resultado. Si los concateno, entonces obtengo lo que estoy esperando, pero esto no parece ser algo que deba concatenar.

var result = conn.Query<string>(procName, parameters, commandType: CommandType.StoredProcedure);

EDITAR: por solicitud de comentario, aquí está el procedimiento almacenado y los datos de ejemplo que se están devolviendo. Esto solo ocurre una vez que los datos XML alcanzan un cierto tamaño. Pequeños lotes de datos XML no hacen que esto suceda. El ejemplo proporcionado aquí debería ser suficiente información para activarlo.

usp_ListAllGroups

SELECT
   (SELECT ClassificationItemID AS '@ID', GroupCN AS '*' 
      FROM UserGroup WITH (NOEXPAND)
       FOR XML PATH('Group'), TYPE)
   FOR XML PATH('Groups');

XML de resultados

<Groups>
  <Group ID="4">SomeGroupName</Group>
  <Group ID="9">SomeGroupName</Group>
  <Group ID="2">SomeGroupName</Group>
  <Group ID="553">SomeGroupName</Group>
  <Group ID="447">SomeGroupName</Group>
  <Group ID="435">SomeGroupName</Group>
  <Group ID="395">SomeGroupName</Group>
  <Group ID="489">SomeGroupName</Group>
  <Group ID="468">SomeGroupName</Group>
  <Group ID="408">SomeGroupName</Group>
  <Group ID="455">SomeGroupName</Group>
  <Group ID="443">SomeGroupName</Group>
  <Group ID="524">SomeGroupName</Group>
  <Group ID="414">SomeGroupName</Group>
  <Group ID="430">SomeGroupName</Group>
  <Group ID="423">SomeGroupName</Group>
  <Group ID="511">SomeGroupName</Group>
  <Group ID="482">SomeGroupName</Group>
  <Group ID="154">SomeGroupName</Group>
  <Group ID="236">SomeGroupName</Group>
  <Group ID="244">SomeGroupName</Group>
  <Group ID="367">SomeGroupName</Group>
  <Group ID="547">SomeGroupName</Group>
  <Group ID="134">SomeGroupName</Group>
  <Group ID="309">SomeGroupName</Group>
  <Group ID="26">SomeGroupName</Group>
  <Group ID="128">SomeGroupName</Group>
  <Group ID="335">SomeGroupName</Group>
  <Group ID="322">SomeGroupName</Group>
  <Group ID="164">SomeGroupName</Group>
  <Group ID="190">SomeGroupName</Group>
  <Group ID="30">SomeGroupName</Group>
  <Group ID="121">SomeGroupName</Group>
  <Group ID="276">SomeGroupName</Group>
  <Group ID="260">SomeGroupName</Group>
  <Group ID="83">SomeGroupName</Group>
  <Group ID="71">SomeGroupName</Group>
  <Group ID="591">SomeGroupName</Group>
  <Group ID="358">SomeGroupName</Group>
  <Group ID="179">SomeGroupName</Group>
  <Group ID="113">SomeGroupName</Group>
  <Group ID="148">SomeGroupName</Group>
  <Group ID="299">SomeGroupName</Group>
  <Group ID="209">SomeGroupName</Group>
  <Group ID="229">SomeGroupName</Group>
  <Group ID="8">SomeGroupName</Group>
  <Group ID="54">SomeGroupName</Group>
  <Group ID="40">SomeGroupName</Group>
  <Group ID="3">SomeGroupName</Group>
  <Group ID="1">SomeGroupName</Group>
</Groups>

Respuesta popular

Para leer su XML del procedimiento almacenado, debe usar el método SqlCommand.ExecuteXmlReader, que devuelve filas de 2.033 caracteres. Esto es por diseño. No he mirado el código Dapper, pero a partir de mis pruebas, parece que Dapper ha implementado esto, que es muy bueno.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué