Entity framework 调用XML存储过程的实体框架将截断2033个字符

Entity framework 调用XML存储过程的实体框架将截断2033个字符,entity-framework,stored-procedures,.net-4.0,for-xml,Entity Framework,Stored Procedures,.net 4.0,For Xml,我有一个存储过程,它在结尾使用FORXML语句,并返回一些XML 我使用的是.NET 4和实体框架,当我导入此存储过程的函数并尝试通过实体框架调用它时,它会截断2033个字符的返回值 我将实体框架替换为传统的ADO.NET方法来调用具有相同问题的存储过程,该存储过程被截断为2033个字符,这是当我看到以下MSDN文章解释这是通过设计实现的,并使用“ExecuteXMLReader”方法来克服它时: 这是一个临时修复,但我想使用实体框架函数导入,所以我没有把ADO.NET代码和EF代码混在一起

我有一个存储过程,它在结尾使用FORXML语句,并返回一些XML

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

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

这是一个临时修复,但我想使用实体框架函数导入,所以我没有把ADO.NET代码和EF代码混在一起

是否有某种方法可以在EF中使用函数导入,返回XML并克服2033字符限制

问候

bgs264

我今天遇到了同样的问题

EF函数调用返回2033个长字符串“chunks”中的XML(例如,如果XML长度为5000个字符,则将收到3个结果:2033个字符中的2个和934个字符中的1个)


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

我对Fermin的答案投了赞成票。对Dementic(和其他任何人)的响应,这里是一个代码片段

由此:

using (var db = new MyEntities())
{
    IEnumerable<string> results = db.GetSomeXML(ProductCode);
    return results.FirstOrDefault();           
}
使用(var db=new MyEntities())
{
IEnumerable results=db.GetSomeXML(ProductCode);
返回结果。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();           
}
使用System.Text//对于StringBuilder
使用(var db=new MyEntities())
{
StringBuilder retval=新建StringBuilder();
IEnumerable results=db.GetSomeXML(ProductCode);
foreach(结果中的var结果)
retval.Append(结果);
返回retval.ToString();
}

自从我发布原始答案以来,我已经移动了作业(两次!),但从记忆中看,上面的代码或多或少是我的。@Justin您能展示一下
db.GetSomeXML()
方法吗?Iam无法使用存储过程返回的
TSQL-XML
数据类型实现此代码。没有错误,只有results变量是
NULL
@Muflix,GetSomeXML()是EF存储过程(非常)公司特定函数导入的通用名称。我目前无法从这里访问,但今晚/明天将进行查看。从内存来看,它可能是nvarchar(max),也可能是TSQL-XML。我们使用的是SQL2008。