调用FOR XML存储过程的实体框架截断为2033个字符

bgs*_*264 10 stored-procedures entity-framework .net-4.0 for-xml

我有一个存储过程,在它的末尾使用FOR XML语句,并返回一些XML.

我正在使用.NET 4和实体框架,当我执行此存储过程的函数导入并尝试通过实体框架调用它时,它会截断2033个字符的返回值.

我将实体框架换成传统的ADO.NET方法来调用具有相同问题的存储过程 - 截断为2033个字符 - 这时我遇到了以下MSDN文章,解释这是设计并使用"ExecuteXMLReader" "克服它的方法:

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

所以这现在作为临时修复工作,但我想使用Entity Framework函数导入,所以我没有将ADO.NET代码与EF代码混淆.

有没有什么方法可以在EF中使用函数导入,返回XML并克服2033字符限制?

关心
bgs264

Fer*_*min 10

我今天遇到了同样的问题.

EF英孚函数调用返回的XML在2033 - 长串"块"(例如,如果你的XML是5000个字元长的,你会得到3个结果:2033个字符和934 1的字符2)

您可以轻松附加这些块以返回XML的完整列表.


Jus*_*tin 6

我赞成了费明的回答.对Dementic(和其他任何人)的回应,这是一个代码片段.

由此:

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

对此:

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();           
}
Run Code Online (Sandbox Code Playgroud)