Платформа сущностей, вызывающая хранимую процедуру FOR XML, усекается до 2033 символов - PullRequest
10 голосов
/ 12 июля 2010

У меня есть хранимая процедура, которая в конце использует инструкцию FOR XML и возвращает мне немного XML.

Я использую .NET 4 и Entity Framework, и когда я выполняю импорт функции этой хранимой процедуры и пытаюсь вызвать ее через Entity Framework, она усекает возвращаемый результат до 2033 символов.

Я поменял Entity Framework на традиционный подход ADO.NET, чтобы вызвать хранимую процедуру, у которой была та же проблема - усеченная до 2033 символов - когда я наткнулся на следующую статью MSDN, объясняющую, что это не совсем понятно, и использовать метод «ExecuteXMLReader» для его преодоления:

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

Так что теперь это временное исправление, но я бы хотел использовать функции импорта Entity Framework, чтобы я не смешивал код ADO.NET с кодом EF.

Есть ли способ использовать импорт функций в EF, вернуть XML и преодолеть ограничение в 2033 символа?

Привет
bgs264

Ответы [ 2 ]

10 голосов
/ 20 июля 2010

Сегодня я столкнулся с той же проблемой.

Вызов функции EF возвращает XML в виде строки «длиной 2033» (например, если ваш XML имел длину 5000 символов, вы получите 3 результата: 2 из 2033 символов и 1 из 934 символов)

Вы можете легко добавить эти чанки, чтобы получить полный список XML.

6 голосов
/ 16 декабря 2015

Я проголосовал за ответ Фермина. Ответ Dementic (и кому-либо еще), вот фрагмент кода.

Из этого:

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

К этому:

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();           
}
...