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