|
|
IN-VESTI DNW!!! Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta. Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni Effettua il pagamento usando IWBank Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione. Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt. Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!! .:DotNetWork Founders:.
|
|
|
|
|
Mapping & Queries in LinqToEntities
Ultimo Post 06 ott 2009 11.38 by adrien. 13 Risposte.
|
Ordina:
|
| Autore |
Messaggi |
 |
 Posts:7
 |
| 05 ott 2009 10.23 |
|
Salve, ho un progetto che si occupa di effettuare il mapping di un database e di fornire, in codice LinqToEntities, le query da effettuare sul db mappato. Il problema è il seguente: il codice che contiene le istruzioni per effettuare le query deve per forze essere "commentato" prima che sia effettuato il mapping. Solo dopo aver effettuato il mapping e dopo aver incluso nel progetto i file mappati (csdl, ssdl, msl) posso togliere dal commento il codice per la query.
Esempio:
using northwindModel; [...] using (northwindEntities nEntities = new northwindEntities()) [...]
Qui , prima di poter mandare in esecuzione il progetto, devo per forza commentare le due istruzioni di cui sopra, altrimenti (giustamente) il compilatore non sa dove andare a pescare "northwindModel", essendo il db non ancora mappato! Dopo aver mappato il db, posso tornare sul codice per rimuovere i commenti e compilare le istruzione per le query. Domanda: è possibile compilare l'intero progetto senza dover prima compiere tutte queste sporche manovre mooolto poco professionali?
|
|
|
|
|
 Posts:657
 |
| 05 ott 2009 10.41 |
|
Ciao, perchè scrivi che: il codice che contiene le istruzioni per effettuare le query deve per forze essere "commentato"
Come stai generando il mapping? Stai inventando tu qualcosa di tuo o utilizzi la procedura standard? |
|
| Rudy Azzan |
|
|
 Posts:7
 |
| 05 ott 2009 10.55 |
|
Mi spiego meglio. Il codice che genera il mapping e il codice che esegue le query sul db mappato si trova tutto in unico file cs. Quando mando in esecuzione il progetto, per la prima volta, se lasciassi tutto così com'è, il compilatore mi darebbe errore. Questo perchè il comando "using cartelleModel" (ad esempio) non puo' essere eseguito, poichè si riferisce a file non ancora generati (csdl, ssdl, msl)! Tali file vengono creati solo DOPO aver effettuato il mapping. Quindi, la soluzione "maccheronica" che ho adottato è quella di mettere sotto commento le porzioni di codice che si occupano delle query e dell'inclusione dei file non ancora generati (codice che mi darebbe inevitabilmente un errore in fase di compilazione). Successivamente, dopo aver fatto il mapping, posso toglierle da sotto commento, includere i file generati nel progetto in LinqToEntities e ricompilare. Ovviamente, mi sembra tutto molto scomodo. Puoi suggerire un metodo più pulito?
PS: ho seguito le procedure di mapping (creazione manuale) indicate su msn.microsoft.com
|
|
|
|
|
 Posts:657
 |
| 05 ott 2009 11.16 |
|
Perchè non utilizzi il mapping a design time? O il tuo problema è proprio il mapping a design con con i files genertati manualmente? O usi il design o metti i files CSDL/MSL/SSDL in un file edmx, leggi qui: http://blogs.msdn.com/dsimmons/archive/2007/12/07/how-to-use-your-existing-csdl-msl-ssdl-files-in-the-entity-designer-ctp2.aspx
e poi visual studio si arrangia a compilare il tutto. |
|
| Rudy Azzan |
|
|
 Posts:7
 |
| 06 ott 2009 08.57 |
|
Creo i file CSDL/MSL/SSDL tramite codice e tutto in manuale!Il designer di visual studio non devo utilizzarlo. Mi spieghi meglio il funzionamento del file edmx!!??? N.B. Dovrei fare tutto in manuale cioè col codice |
|
|
|
|
 Posts:657
 |
| 06 ott 2009 09.28 |
|
edmx è un file xml che definische l'entity data model, descrive lo schema del database e definisce il mapping. Questo file in visual studio viene processato a design time dal "EntityModelCodeGenerator", il quale crea in automatico le classi di mapping e di accesso al database necessarie. Tornando al tuo problema non ho capito chi è che ti compila le classe e genera il codice durante la compilazione del progetto, e ti obbliga a commentare le classi. Se stai usando l'EdmGen.exe http://msdn.microsoft.com/en-us/library/cc716790.aspxO qualcosa di simile allora ti consiglio di usarlo prima della cmpilazione: Nelle proprietà del progetto vai nella scheda "Build Events" e alla voce "Pre.build events command line" puoi chiamare il tuo exe, il tuo compilatore ... ciò che usi per generare le classi dai tuoi files "CSDL/MSL/SSDL". |
|
| Rudy Azzan |
|
|
 Posts:7
 |
| 06 ott 2009 09.39 |
|
..... using cartelleModel; ... //MAIN switch (n) { case 1: mapp.StartProcess(); break; case 2: using (cartelleEntities nEntities = new cartelleEntities()) { ObjectQuery vista_nom = nEntities.nominativo_sdo; ......break; Questo è tutto in una pagina di codice. Ora se compilo questa pagina mi da errore (using cartelleModel; e al acse2) e poichè non facendo prima il mapping del database non vede le entità create con i file CSDL/MSL/SSDL. CAPITO??? Se invece commento il case 2 e l'using, e faccio prima il mapping tutto poi funziona. |
|
|
|
|
 Posts:657
 |
| 06 ott 2009 10.07 |
|
Capito benissimo:
Prima usi qualcosa per generare le classi, poi le usi... Ma non puoi usare una cosa che non esiste.
Quindi potresti fare 2 progetti: Il primo ti compila i files CSDL/MSL/SSDL e ti genera i files necessari. Il secondo progetto Usa i files che hai compilato.
Se devi invece fare tutto dinamicamente diventa più complicato. Che risultato devi ottenere? |
|
| Rudy Azzan |
|
|
 Posts:7
 |
| 06 ott 2009 10.23 |
|
Eseguo prima delle query su un database con LINQ TO ENTITES, prendo i risultati e li metto in un file TXT formattato in un certo modo
|
|
|
|
|
 Posts:657
 |
| 06 ott 2009 10.48 |
|
Ecco..., è come ti ho scritto qualche post fa: Tu stai usando "edmgen.exe"
Quindi se tu metti il testo del file "EdmSql.bat", (che mi hai mandato via mail) nell'evento pre.build del progetto Visual Studio, lui ti sovrascrive il tuo file "Objects.cs", prima che venga compilato. Quindi poi hai le tue classi disponibili per la vera e propria compilazione e il tuo problema è risolto. |
|
| Rudy Azzan |
|
|
 Posts:657
 |
| 06 ott 2009 10.53 |
|
Il problema (fra virgolette) è che "edmgen.exe" ti crea un file cs (o vb) dandogli in pasto un file xml che descrive il mapping al database. Questo file cs (o vb) prima di essere utilizzato deve venire compilato. Quidi sono 2 processi completamante diversi. E non possono vivere assieme nello stesso progetto. Quindi l'opzione di pre-buid ti prepara il file cs (o vb) che verrà successivamente compilato. |
|
| Rudy Azzan |
|
|
 Posts:7
 |
| 06 ott 2009 10.53 |
|
ma se vedi bene il file BAT, io gli passo dei parametri con %1,%2 e così via, in base al tipo di database a cui devo connettermi. Info che io leggo dal file XML.
Come faccio a mettere nel pre-compilazione???non posso mica passargli i parametri che leggo dal file XML???
|
|
|
|
|
 Posts:657
 |
| 06 ott 2009 11.06 |
|
Ti tocca fare 2 progetti allora... Un exe che compilato genera il file cs o (vb) e lo copia nell'altro progetto (non compilato). Il secondo che quando compili usa il file cs (o vb) generato dal primo. Altre vie d'uscita non ne vedo..
|
|
| Rudy Azzan |
|
|
 Posts:7
 |
| 06 ott 2009 11.38 |
|
mi sa di si....è l'unica soluzione!!! Grazie di tutto Rudy, davvero sei stato preziosissimo DOTNETWORK è stato l'unico sito che ha risposto alla mia problematica: GRANDIOSI :-) |
|
|
|
|
| Non sei autorizzato ad inviare una risposta. |
|
Active Forums 4.1
|
|
|
|
|
|
|
|
|
Autenticazione ASP.NET |
 |
Come funziona la configurazione dell'autenticazione ASP.NET? Scopriamolo tramite alcuni test. |
 |
|
2007/08/09 | Autore: Rudy Azzan
|
|
|
|
|
|
|
|
|
|
|
|
|
|