2010-07-12 6 views
8

Ho una procedura memorizzata che utilizza un'istruzione FOR XML alla fine e restituisce un po 'di XML.Il framework di entità che chiama una stored procedure FOR XML viene troncato a 2033 caratteri

Sto usando .NET 4 e Entity Framework e quando faccio una funzione di importazione di questa stored procedure e provo a chiamare tramite Entity Framework si tronca il ritorno a 2033 caratteri.

Ho sostituito l'Entity Framework per un approccio ADO.NET tradizionale per chiamare la procedura memorizzata che aveva lo stesso problema - troncato a 2033 caratteri - che è quando ho trovato il seguente articolo di MSDN che spiega che questo è di progettazione e utilizzare il metodo "ExecuteXMLReader" per superarla:

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

quindi questo sta lavorando ora come una soluzione temporanea, ma mi piacerebbe usare importazioni di funzionalità di Entity Framework, quindi non ho il codice ADO.NET miscelato con codice EF.

Esiste un modo per utilizzare le importazioni di funzioni in EF, restituire l'XML e superare il limite di 2033 caratteri?

saluti
bgs264

risposta

7

Ho incontrato lo stesso problema di oggi.

La funzione di chiamata EF restituisce l'XML nel 2033-lunga serie 'pezzi' (ad esempio, se il vostro XML erano 5000 caratteri tempo si avrebbe ricevuto 3 risultati: 2 di 2033 caratteri e 1 di 934 caratteri)

Puoi aggiungere facilmente questi blocchi per restituire un elenco completo dell'XML.

+0

Potrebbe condividere un po 'di codice? – Dementic

+0

Frammento di codice piccolo sotto. – Justin

2

Ho svalutato la risposta di Fermin. Risposta a Dementic (e chiunque altro), ecco un frammento di codice.

Da questo:

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

A tal:

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

Ho spostato il lavoro (due volte!) Da quando ho postato la mia risposta originale ma dalla memoria il codice precedente è più o meno quello che avevo. – Fermin

+0

@Justin puoi mostrare il metodo 'db.GetSomeXML()'? Iam non è in grado di implementare questo codice con il tipo di dati 'TSQL-XML' che ritorna dalla stored procedure. Non c'è errore, solo la variabile risultati è 'NULL'. – Muflix

+0

@Muflix, che GetSomeXML() è un nome generalizzato per l'importazione funzione (molto) specifica dell'azienda della procedura memorizzata EF. Al momento non ho accesso a quello da qui, ma guarderò stasera/domani. Dalla memoria, probabilmente sarebbe stato nvarchar (max) o * eventualmente * TSQL-XML. Stavamo usando SQL 2008. – Justin

Problemi correlati