2016-06-16 3 views
1

내가 사용하고있는 것들 중 하나는 데이터베이스에서 XML 데이터를 문자열로 변환 한 다음 필요한 방식으로 주어진 객체 내에서 직렬화 해제하는 것입니다.dapper가 XML 데이터를 문자열 목록으로 분할합니까?

오늘 나는 dapper가 XML이 포함 된 문자열 목록을 반환 한 곳을 발견했습니다. 이것은 의도 된 것입니까? 단일 문자열 xml이 반환 될 것으로 예상되면이 코드를 사용해야합니까?

다음은 proc을 호출하는 방법이며 proc을 실행하면 XML 데이터가 포함 된 단일 결과를 반환하지만 dapper는 결과에 2 개의 문자열을 반환합니다. 만약 내가 그들을 연결하면, 내가 기대하는 바를 얻었지만, 이것은 내가 결합시켜야하는 것처럼 보이지 않습니다.

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

편집 : 주석 요청 당 반환되는 저장 프로 시저 및 예제 데이터입니다. 이는 XML 데이터가 특정 크기에 도달하면 발생합니다. 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

Dapper Streaming API와 관련이 있다고 생각합니다. 저장 프로 시저에 대한 자세한 정보를 제공 할 수 있습니까? – supertopi

+0

@supertopi가 답변을 업데이트하여 자세한 정보를 포함 시켰습니다. – akousmata

+0

어떤 데이터베이스를 사용하고 있습니까? Dapper는 그렇게해서는 안됩니다. 하지만 데이터베이스 자체가 될 수도 있습니다. –

답변

0

, 당신은 2033 개 문자의 행을 반환 SqlCommand.ExecuteXmlReader 방법을 사용합니다. 이는 의도적으로 설계된 동작입니다. 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

관련 문제