2010-07-12 17 views
8

J'ai une procédure stockée qui utilise une instruction FOR XML à la fin de celle-ci et me renvoie du code XML. J'utilise .NET 4 et Entity Framework et lorsque je fais une importation de fonction de cette procédure stockée et que j'essaie de l'appeler via Entity Framework, elle tronque le retour à 2033 caractères.Structure d'entité appelant une procédure stockée FOR XML tronquée à 2033 caractères

J'ai changé le Entity Framework pour une approche ADO.NET traditionnelle pour appeler la procédure stockée qui avait le même problème - tronqué à 2033 caractères - qui est lorsque je suis tombé sur l'article MSDN suivant expliquant qu'il s'agit de by-design et utiliser la méthode « ExecuteXmlReader » pour surmonter:

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

alors que cela fonctionne maintenant comme une solution temporaire mais je voudrais utiliser les importations de fonction Entity Framework, donc je ne l'ai pas eu du code ADO.NET mélangé avec le code EF.

Existe-t-il un moyen d'utiliser les importations de fonctions dans EF, de renvoyer le XML et de dépasser la limite de 2033 caractères?

Cordialement
bgs264

Répondre

7

je suis tombé sur la même question aujourd'hui.

L'appel de fonction EF retourne le XML en 2033 longue chaîne « morceaux » (par exemple, si votre XML était de 5000 caractères de temps vous recevriez 3 résultats: 2 de 2033 caractères et 1 de 934 caractères)

Vous pouvez ajoutez facilement ces morceaux pour renvoyer une liste complète du XML.

+0

Pourriez-vous un code? – Dementic

+0

Petit fragment de code ci-dessous. – Justin

2

J'ai augmenté la réponse de Fermin. Réponse à Dementic (et à tout le monde), voici un fragment de code.

De ceci:

using (var db = new MyEntities()) 
{ 
    IEnumerable<string> results = db.GetSomeXML(ProductCode); 
    return results.FirstOrDefault();   
} 

à ceci:

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();   
} 
+0

J'ai déplacé le travail (deux fois!) Depuis que j'ai posté ma réponse originale mais de mémoire le code ci-dessus est plus ou moins ce que j'avais. – Fermin

+0

@Justin pouvez-vous afficher la méthode 'db.GetSomeXML()'? Je ne suis pas en mesure d'implémenter ce code avec le type de données 'TSQL-XML' renvoyé par la procédure stockée. Il n'y a pas d'erreur, seule la variable de résultat est 'NULL'. – Muflix

+0

@Muflix, que GetSomeXML() est un nom généralisé pour l'importation de fonction (très) spécifique à la compagnie de la procédure stockée EF. Je n'ai actuellement pas accès à ça à partir d'ici, mais je vais regarder ce soir/demain. De mémoire, il aurait probablement été nvarchar (max), ou * éventuellement * TSQL-XML. Nous utilisions SQL 2008. – Justin