10

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

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

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

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

所以这现在作为一个临时修复工作,但我想使用实体框架函数导入,所以我没有将 ADO.NET 代码与 EF 代码混合。

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

问候
bgs264

4

2 回答 2

11

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

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

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

于 2010-07-20T10:59:07.697 回答
7

我赞成费尔明的回答。对 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();           
}
于 2015-12-16T14:12:43.590 回答