2016-06-16 2 views
1

Одна из вещей, которые я использовал dapper for, - это преобразовать XML-данные, поступающие из нашей базы данных в строки, а затем десериализовать их внутри данного объекта так, как мне это нужно.Делает ли dapper разделение данных XML в список строк?

Я столкнулся с чем-то сегодня, когда dapper вернул список строк, содержащих XML, только он был разделен. Это предназначено? Должен ли я кодироваться вокруг этого, если я ожидаю вернуть одну строку xml?

Вот как я вызываю proc, и если вы выполняете proc, он возвращает единственный результат, содержащий данные XML, но dapper возвращает 2 строки в результате. Если я их конкатенирую, то я вернусь к тому, что ожидаю, но это не похоже на то, что мне нужно было бы конкатенировать.

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

EDIT: Для запроса комментариев здесь приведены данные хранимой процедуры и примера, которые возвращаются. Это происходит только после того, как данные XML достигнут определенного размера. Меньшие партии данных XML не вызывают этого. В приведенном здесь примере должно быть достаточно данных, чтобы вызвать его.

usp_ListAllGroups

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

Результат 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> 
+0

Я считаю, что это как-то связано с API-интерфейсом Dapper Streaming. Не могли бы вы предоставить больше информации о хранимой процедуре? – supertopi

+0

@supertopi обновил ответ, чтобы включить дополнительную информацию. – akousmata

+0

Какую базу данных вы используете? Даппер не должен этого делать; но сама база данных. –

ответ

0

читать ваш XML из хранимой процедуры, можно использовать метод SqlCommand.ExecuteXmlReader, который возвращает строки 2033 символов. Это по дизайну. Я не смотрел на код Dapper, но из моего тестирования. Похоже, Dapper внедрил это, что очень круто.

+0

Я считаю, что то, что вы предлагаете, неверно. 'SqlCommand.ExecuteXmlReader' возвращает весь поток xml, а не строки символов. https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executexmlreader(v=vs.110).aspx Я не вижу нигде в коде Dapper, где они извлекают поток xml , Если бы они были тогда, вы были бы правы, и моя проблема не будет происходить. – akousmata