2010-07-12 2 views
8

끝에 FOR XML 문을 사용하는 저장 프로 시저가 있으며 XML을 반환합니다.FOR XML 저장 프로 시저를 호출하는 엔터티 프레임 워크는 2033 자로 자릅니다.

.NET 4 및 Entity Framework를 사용하고 있는데이 저장 프로 시저의 함수 가져 오기를 수행하고 Entity Framework를 통해 호출하려고하면 2033 자의 반환 값이 잘립니다.

전통적인 ADO.NET 접근 방식을 사용하여 Entity Framework를 바꿔 동일한 문제가있는 저장 프로 시저를 호출했습니다. 2033 자로 잘립니다. 다음 MSDN 기사를 통해이 설명과 디자인을 설명했습니다. 그래서 이것은 임시 수정으로 지금 노력하고 있습니다

http://support.microsoft.com/kb/310378

을하지만 ADO.NET 코드가 혼합 그래서 내가 가진 적이 없다 엔티티 프레임 워크 기능의 수입을 사용하고 싶습니다 : 그것을 극복하기 위해 "ExecuteXMLReader"방법을 사용 EF 코드로 업.

EF에서 함수 가져 오기를 사용할 수있는 방법이 있습니까? XML을 반환하고 2033 자 제한을 극복하십시오.

안부
bgs264

답변

7

오늘 같은 문제 다 퉜다.

EF의 함수 호출은 2033 - 긴 문자열에서 XML을 반환 '덩어리'(예를 들어, 당신의 XML이 있었다면 5000 개 문자는 3 개 결과를받을 오랫동안 : 2 2033의 문자 1 (934)의 문자)

당신은 할 수 있습니다 이러한 청크를 쉽게 추가하여 전체 XML 목록을 반환 할 수 있습니다.

+0

당신은 몇 가지 코드를 공유 할 수 : 이것에

using (var db = new MyEntities()) { IEnumerable<string> results = db.GetSomeXML(ProductCode); return results.FirstOrDefault(); } 

이에서

? – Dementic

+0

아래의 작은 코드 조각. – Justin

2

나는 Fermin의 대답을지지했다. Dementic (그리고 다른 누구에게나)에 대한 응답은 여기 코드 조각입니다.

using System.Text;  //For the StringBuilder 

using (var db = new MyEntities()) 
{ 
    StringBuilder retval = new StringBuilder(); 

    IEnumerable<string> results = db.GetSomeXML(ProductCode); 
    foreach (var result in results) 
     retval.Append(result); 

    return retval.ToString();   
} 
+0

원본 답변을 올린 이래로 나는 일자리를 두 번이나 옮겼지만 위의 코드는 내가 가진 것보다 많습니다. – Fermin

+0

@ Justin은'db.GetSomeXML()'메소드를 보여줄 수 있습니까? Iam은 저장 프로 시저에서 반환하는'TSQL-XML' 데이터 유형으로이 코드를 구현할 수 없습니다. 오류가 없으며 결과 변수 만 'NULL'입니다. – Muflix

+0

@Muflix, GetSomeXML()은 EF 저장 프로 시저의 (아주) 회사 특정 함수 가져 오기의 일반화 된 이름입니다. 나는 현재 여기로부터 접근 할 수 없지만, 오늘 밤/내일 볼 것이다. 메모리에서 아마도 nvarchar (max) 또는 * 아마도 * TSQL-XML이었을 것입니다. 우리는 SQL 2008을 사용하고있었습니다. – Justin