Pergunta

Eu tenho um procedimento armazenado que usa uma instrução FOR XML no final e me retorna algum XML.

Estou usando .NET 4 e o Entity Framework e quando faço uma importação de função desse procedimento armazenado e tento chamá-lo através do Entity Framework ele trunca o retorno em 2033 caracteres.

Troquei o Entity Framework por uma abordagem tradicional do ADO.NET para chamar o procedimento armazenado que tinha o mesmo problema - truncado em 2.033 caracteres - que foi quando me deparei com o seguinte artigo do MSDN explicando que isso é intencional e para usar o "ExecuteXMLReader "método para superá-lo:

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

Portanto, isso está funcionando agora como uma correção temporária, mas eu gostaria de usar as importações de funções do Entity Framework, para não misturar o código ADO.NET com o código EF.

Existe alguma maneira de usar importações de funções no EF, retornar o XML e superar o limite de 2.033 caracteres?

Cumprimentos
bgs264

Foi útil?

Solução

Eu corri para o mesmo problema hoje.

A chamada de função EF retorna o XML em 2033-long String 'Chunks' (por exemplo, se o seu XML tinha 5000 caracteres, você receberia 3 resultados: 2 de 2033 caracteres e 1 de 934 caracteres)

Você pode facilmente anexar esses pedaços para retornar uma lista completa do XML.

Outras dicas

Votei positivamente na resposta de Fermin.Resposta ao Dementic (e a qualquer outra pessoa), aqui está um fragmento de código.

A partir disso:

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

Para isso:

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();           
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top