エンティティフレームワークは、XMLストアドプロシージャのために2033文字の切り捨てを呼び出す
-
14-09-2020 - |
質問
私はその末尾にfor XMLステートメントを使用しているストアドプロシージャを持っていて、いくつかのXMLを返します。
.NET 4とエンティティフレームワークを使用しています。このストアドプロシージャの関数インポートを実行し、エンティティフレームワークを介してそれを呼び出すようにして、2033文字の戻り値を切り捨てます。
私は、同じ問題を有するストアドプロシージャを呼び出すための従来のADO.NETアプローチのエンティティフレームワークを交換しました - 2033文字で切り捨てられた - 私が次のMSDNの記事に遭遇したときのものです。それを克服するための "executexmlReader"メソッド:
http://support.microsoft.com/kb/310378
だからこれは一時的な修正として今取り組んでいますが、エンティティフレームワーク機能のインポートを使用したいので、ADO.NETコードがEFコードで混在していません。
EFで機能インポートを使用できる方法はあります。XMLを返し、2033文字制限を克服しますか?
雑誌
BGS264
解決
今日の同じ問題になりました。
EF関数呼び出しは、2033年の文字列 'chunks'(XMLが5000文字の長さが1つの結果を受けた場合は、2つの結果を受け取る場合:2/23 Chars、934文字のうち1)のXMLを返します。
XMLの全リストを返すようにこれらのチャンクを簡単に追加することができます。
他のヒント
私はフェルミンの答えを吸入しました。痴呆(そして他の人)への対応は、ここでコードフラグメントです。
これから:
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();
}
. 所属していません StackOverflow