2010-11-01 1 views
6

Ho implementato i modelli T4 Repository/Unit of Work di Gil Fink per l'utilizzo in un progetto su cui sto lavorando, il mio primo progetto a grandezza intera che utilizza MVC. Tuttavia, sto ottenendo un errore che non stavo ottenendo prima e non riesco a rintracciarlo. Non so se si tratta di qualcosa con i modelli, o solo di un'impostazione che ho sbagliato, ma in questo momento sono in perdita. Speravo che qualcuno sarebbe stato in grado di far luce sulla situazione.MVC3 EF4 POCO Repository/UnitOfWork Errore di connessione

Ecco la mia messa a punto quadro:

  • MVC 3 Beta
  • SQL Server 2008 R2
  • Ninject v2.1.0.76
  • EF4 POCO
  • 3 progetti nella soluzione: dati, Entità e l'app MVC.

Sto facendo un primo progetto di DB e utilizzo di EF per creare le classi POCO, tramite il generatore di entità POCO ADO.NET di Microsoft. Quindi utilizzo lo strumento T4 per creare il repository e l'unità di modelli di lavoro. Con questa configurazione e tutte le classi e gli archivi generati, li implemento nell'app MVC utilizzando Ninject per DI. Sto utilizzando il metodo MVC 2 utilizzando un Controller Factory a questo punto, con l'intenzione di modificarlo in seguito nel metodo IDependencyResolver.

Quando utilizzo un repository Mock codificato, l'applicazione funziona come dovrebbe, tuttavia quando lo cambio per utilizzare il binding IRepository, viene visualizzato il seguente errore: "La connessione fornita non è valida perché non è sufficiente Informazioni sui mapping o sui metadati Nome parametro: connessione " Ciò indica che la stringa di connessione per EF alla connessione al DB non è corretta, tuttavia è la stringa predefinita generata dal modello del modello di dati di entità ADO.NET. Forse è anche qualcosa con le impostazioni .edmx.

Qui è la mia stringa di connessione (utilizzando il pratico layout del database Nerd Cena)

<add name="NerdDinnerEntities" 
connectionString="metadata= 
res://*/Model1.csdl| 
res://*/Model1.ssdl| 
res://*/Model1.msl; 
provider=System.Data.SqlClient; 
provider connection string=&quot;Data Source=Wayne;Initial Catalog=NerdDinner;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" 
providerName="System.Data.EntityClient" /> 

chiunque con qualsiasi pensieri/suggerimenti, ecc, sarei estremamente riconoscente.

Edit: ecco il link per il modello T4 sto usando: Repository and Unit of Work T4 Template for Entity Framework

Edit2: L'errore è qualcosa a che fare con la casa che sto usando DI con unità di lavoro. quando rimuovo DI, e manualmente ho le dipendenze nei controller, funziona. Quando provo a implementare DI, si rompe.

risposta

3
res://*/Model1.csdl| 

Quello * è un carattere jolly che dice a EF "scansiona tutti gli assiemi per la risorsa". È probabile che questa scansione non stia trovando l'assemblea per qualsiasi motivo.

Change * al tuo nome assembly:

res://My.Assembly.Name/Model1.csdl| 
+0

In realtà l'ho provato. Ho usato .NET Reflector per assicurarmi di avere il giusto nome assembly per questo. Ho anche provato una soluzione "one-shot" di "res: // * /;", ma non ha funzionato. –

+1

Bingo! Questo ha risolto il mio problema. Grazie @jfar –

1

Se si utilizza NuGet per installare il dipendenze Ninject, gli piace impostare le associazioni di a NinjectWebCommon.cs. Se il caricamento delle associazioni DI richiede che venga creato un contesto Entity Framework, ciò accade troppo presto nel ciclo di vita dell'applicazione e l'applicazione non può interpretare correttamente la stringa di connessione.

Se pensi che questo potrebbe essere quello che ti sta succedendo, see my answer here for more information.