2016-05-19 20 views
7

Al lavoro ho appena installato una copia completamente nuova del mio sistema operativo e una nuova copia di VS2015. Quando clonerò la mia soluzione per la prima volta, non posso più costruirla, anche se ho generato i file C# come faccio sempre, aprendo prima il file .edmx e facendo clic sull'icona "Salva".EntityFramework non genera correttamente file C# (alcune enumerazioni sono incomplete, quindi build fallisce)

Quando si costruisce si genera l'errore:

CS0150: A constant value is expected

Perché le enumerazioni che ha generato sono incompleti! Un esempio di uno:

public enum DocumentType : int 
{ 
    Identity = 1, 
    ResidenceProof = 2, 
    RegisterDoc = , 
} 

ho avuto anche questo errore del compilatore, al momento, ma dopo aver fissato il mio C# enumerazioni sono ancora in fase di generazione a torto:

The ADO.NET provider with invariant name 'MySql.Data.MySqlClient' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details

Come diavolo faccio a risolvere questo problema ?

+0

Quale messaggio è contenuto in 'InnerException'? –

+0

Il seguente post potrebbe essere utile: http: //stackoverflow.com/questions/15142841/no-entity-framework-provider-found-for-mysql-data-mysqlclient-ado-net-provider - ma non lo sono certo. –

+0

@DavidTansey: non sono sicuro che questo è lo stesso problema, non ho eccezioni ma errori del compilatore – knocte

risposta

1

Ho avuto lo stesso problema. È risultato che texttransform.exe non è in grado di capire bene le diverse terminazioni di linea. Il mio file .tt è stato salvato con Unix EOL e, quando l'ho salvato con Windows EOL, ha iniziato a funzionare correttamente. Semplicemente: apri il tuo file .tt in WordPad e salva.

1

Non proprio una risposta, ma posterò i miei risultati e la soluzione che ho scelto di utilizzare;

Il modello di generazione del codice T4 (il file allegato al file .edmx che utilizza il file .tt file-extention) contiene codice per generare C# utilizzando i dati disponibili nel modello, sospetto che il codice alla riga # 204 (potrebbe essere situato su un numero di linea diverso nella tua versione) per contenere un bug minore.

Una schermata dal mio progetto e soluzione attiva esploratore: Code inside the .tt file

Questa riga causa enumerazioni difettosi:

this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1); 

Questo rimuove presumibilmente caratteri di codice generati che sono stati aggiunti dal generatore enum per rimuovere l'ultimo , dall'enumerazione, poiché non è necessario.

Ho testato la funzionalità di questo aggiungendo l'output di fronte a questa riga, ho provato a creare un enum che emetterebbe MyEnumMemberName = TEST, e ho rilevato che l'output conteneva MyEnumMemberName = TES,.

Usando questo ho trovato che cambiando la linea a:

this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 2, 1); 

risolve il mio problema.

Attualmente non è possibile verificare se questo funziona anche sulle macchine che stavano già generando il codice corretto ma spero che possa aiutare alcuni di voi. In bocca al lupo.

+0

scusa ma da dove viene questo codice? Come lo si individua in VS? Sai se questo fa parte di EF? – knocte

+0

I utilizzare un approccio model-first, in un progetto vuoto aggiungere un Entity Data Model (.edmx), aprire il modello (Named Model1.edmx) e fare clic con il pulsante destro del mouse> Aggiungi elemento di generazione codice. Ciò aggiungerà un elemento Model1.tt nella soluzione albero di esplorazione sotto il tuo Model1.edmx, il codice di cui sto parlando si trova all'interno di questo file Model1.tt. – Fixation

+0

Non sono sicuro di quale plug-in VS inietti il ​​codice in questo file Model1.tt per cominciare, probabilmente è EF. spero ancora di trovare una risposta sulla falsariga di "Aggiorna la tua XX alla versione XX" – Fixation