Estrutura de entidade que chama um procedimento armazenado FOR XML trunca em 2.033 caracteres
-
14-09-2020 - |
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
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();
}