Ricerca
 Italiano (Italia) English (United States)
Register
Login
DotNetWork Forums
Mapping & Queries in LinqToEntities
Last Post 06 Oct 2009 11:38 by adrien. 13 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
AuthorMessagesResolved

Posts:7

--
05 Oct 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:496

--
05 Oct 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 Oct 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:496

--
05 Oct 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 Oct 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:496

--
06 Oct 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.aspx

O 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 Oct 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:496

--
06 Oct 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 Oct 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:496

--
06 Oct 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:496

--
06 Oct 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 Oct 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:496

--
06 Oct 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 Oct 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 :-)
You are not authorized to post a reply.

Active Forums 4.1
       
Articoli Pubblicati
Stampare Una DatagridView
Come utilizzare gli oggetti di stampa forniti dal framework per stampare il contenuto di una DatagridView con l'ausilio della GDI+
2008/12/07 | Author: Andrea Zingoni
Icons and Toolstrips
Icons of the right dimension and runtime updated Toolstrips
2009/06/28 | Author: Sabrina Cosolo
Assembly Strong Named
Digital Signature of Assemblies, use and functionality
2007/08/05 | Author: Sabrina Cosolo
Memorizzare immagini in SQL Server
un'immagine per la memorizzazione su un campo Image di SQL Server e viceversa
2007/09/04 | Author: Sabrina Cosolo
Starting from Scratch with WPF (Part 3)
Rows, deities, brushes and refrigerators (first part)
2007/11/22 | Author: Sabrina Cosolo
CodeDom Getting started part 2
Building the Code Generator
2009/11/07 | Author: Sabrna Cosolo
Panoramica degli Eventi Pilotati
Come iniziare a capire com'è fatto WPF (parte 4)
2007/08/14 | Author: Patrizia Cosolo
Starting from scratch with Visual Studio
Introducing .NET and Visual Studio
2007/07/29 | Author: Sabrina Cosolo
   Print     
Home|Community|Contenuti|Forums|Blogs|Workshops
© 2007-2010 by DotNetWork .:. Terms Of Use .:. Privacy Statement .:. Login .:.