One of the things I've been using dapper for is to convert XML data coming from our database into strings and then deserializing it within the given object the way I need it.
I came across something today where dapper returned a list of strings containing the XML only it was split up. Is this intended? Should I be coding around this if I'm expecting a single string of xml to be returned?
Here's how I'm calling the proc and if you execute the proc, it returns a single result containing XML data, but dapper is returning 2 strings in the result. If I concatenate them, then I get back what I'm expecting, but this doesn't seem like it's something I should have to concatenate.
var result = conn.Query<string>(procName, parameters, commandType: CommandType.StoredProcedure);
EDIT: Per comment request, here is the stored procedure and example data that is being returned. This only occurs once the XML data reaches a certain size. Smaller batches of XML data do not cause this to happen. The example provided here should be enough data to trigger it to happen.
usp_ListAllGroups
SELECT
(SELECT ClassificationItemID AS '@ID', GroupCN AS '*'
FROM UserGroup WITH (NOEXPAND)
FOR XML PATH('Group'), TYPE)
FOR XML PATH('Groups');
Result XML
<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>
To read your XML from the stored procedure, you would use the SqlCommand.ExecuteXmlReader method which returns rows of 2,033 characters. This is by design. I haven't looked at the Dapper code, but from my testing, It appears that Dapper has implemented this which is very cool.