2012-08-30 18 views
14

Ho notato in VS2012 che quando si crea un nuovo modello EF (.edmx) che DbContext è la generazione di codice predefinita e i file .tt (modello T4) sono ora annidato sotto il file .edmx in Esplora soluzioni.Visual Studio 2012 - Impossibile spostare file .tt EF

Domanda:C'è un modo per spostare questi file .tt in un'altra cartella o progetto? Quando provo a trascinare e rilasciare in Solution Explorer, non mi consente di spostare il file .tt nidificato.

Dettagli problema: precedenza (in VS2010) ho usato per spostare il file uno .tt per i miei Pocos in una libreria di classi chiamati DataDefinitions e ho lasciato l'altro file .tt per il mio contesto in una libreria di classi denominata DataAccess. Ora sembra che non sarò in grado di spostare questi file ... e separare le mie risorse in diversi livelli.

In questo articolo di MSDN, se si scorre verso il basso, si può vedere un quadro di come i file .TT ora sono annidati ... http://msdn.microsoft.com/en-us/data/jj613116

risposta

23

Si tratta di una strana nuova caratteristica in cui i modelli vengono aggiunti come dipendenza dal file EDMX. Puoi sistemarlo modificando il file .csproj per il tuo progetto (puoi farlo nel blocco note o scaricare il progetto in VS e modificarlo). Troverete qualcosa di simile:

<None Include="Model.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <DependentUpon>Model.edmx</DependentUpon> 
    <LastGenOutput>Model.cs</LastGenOutput> 
</None> 

Hai solo bisogno di rimuovere DependentUpon elemento e l'oggetto modello entrerà a far parte indipendente del progetto.

+0

Questa risposta ha funzionato per me, grazie! A proposito, ho deciso di andare avanti con quello che gli sviluppatori di MS hanno in mente, e mantenere tutto il mio codice EF in un unico livello. Ritengo che sia un po 'caotico avere oggetti dati e codice di accesso ai dati nella stessa libreria di classi, ma non voglio dover combattere Visual Studio per "correggere" i file generati in ogni momento. – ClearCloud8

+1

Vado avanti e modifica il file .csproj. grazie @Ladislav – vijiboy

+2

Odio che tu cambi la tua architettura adatta a soddisfare l'impostazione di schifezza dei microsofts. Non ho idea del motivo per cui Microsoft sta mettendo le entità e il livello di accesso ai dati (contesti) nello stesso progetto. Se questo non può essere risolto facilmente, il codice dell'interfaccia utente dovrebbe fare riferimento al DAL diretto anziché passare attraverso la BLL e questo in realtà viola la corretta architettura del tier N secondo me. L'interfaccia utente non dovrebbe avere accesso diretto al DAL senza passare attraverso la BLL per garantire che vengano elaborate le regole aziendali corrette. – Matt

2

Sto utilizzando EF5.x un DBContext in un progetto separato per il modello di dati EF. Nonostante la rimozione della voce DependentUpon nel file di progetto come indicato da Ladislav e here, le classi continuavano a comparire nel mio file Model1.tt.

Per ovviare a questo, ho dovuto togliere anche parte delle voci dal file di progetto per ciascuna delle tabelle:

<Compile Include="MyTableName.cs"> 
    <DependentUpon>Model1.tt</DependentUpon> 
</Compile> 

solo linee con i <DependentUpon> tag devono essere rimossi, mentre i <Compile Include="..."> tag devono essere tenuto. La rimozione dell'intera voce causerà la scomparsa del file dall'elenco dei progetti. Le voci possono essere abbreviate a <Compile Include="MyTableName.cs"\> per brevità.

0

Invece di modificare i file di progetto, aggiungo un modello EF con lo stesso nome al progetto, chiudo la soluzione, copio i file del modello dall'altro progetto e riapre la soluzione. Io cambio lo spazio dei nomi nelle proprietà edmx e poi ricompilare il modello.

Problemi correlati