【问题标题】:Entity framework calling a FOR XML stored procedure truncates at 2033 characters调用 FOR XML 存储过程的实体框架在 2033 个字符处截断
【发布时间】:2010-07-12 12:03:20
【问题描述】:

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

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

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

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

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

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

问候
bgs264

【问题讨论】:

    标签: entity-framework stored-procedures .net-4.0 for-xml


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我赞成 Fermin 的回答。对 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();           
      }
      

      【讨论】:

      • 自从我发布原始答案以来,我已经换了工作(两次!),但从记忆中,上面的代码或多或少是我所拥有的。
      • @Justin 你能展示一下db.GetSomeXML() 方法吗?我无法使用从存储过程返回的 TSQL-XML 数据类型来实现此代码。没有错误,只有结果变量是NULL
      • @Muflix,GetSomeXML() 是 EF 存储过程的(非常)公司特定函数导入的通用名称。我目前无法从这里访问它,但今晚/明天会看看。根据记忆,它可能是 nvarchar(max) 或 可能 TSQL-XML。我们使用的是 SQL 2008。
      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多