L’utilizzo di MySql con Entity Framework 4 e il Codice di Sviluppo Prima di CTP

Ho pensato di sperimentare un po ‘ con Scott Guthrie post più recente codice-primo dev con Entity Framework 4. Invece di utilizzo di Sql Server, sto cercando di utilizzare MySql. Qui ci sono le parti pertinenti del mio web.config (questo è un Asp.Net MVC 2 app):

<connectionStrings>
    <add name="NerdDinners"
         connectionString="Server=localhost; Database=NerdDinners; Uid=root; Pwd=;"
         providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider" 
           invariant="MySql.Data.MySqlClient" 
           description=".Net Framework Data Provider for MySQL" 
           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

Proprio come il tutorial, mi aspettavo EF4 per generare il db per me automaticamente. Invece, genera una ProviderIncompatibleException, con un’eccezione interna che si lamentano che il NerdDinners il database non esiste.

Fiera abbastanza, quindi ho creato il db MySql per solo per vedere se le cose funzionano, e ho preso un altro ProviderIncompatibleException invece. Questa volta, “DatabaseExists non è supportato dal fornitore”.

Lo ammetto, questa è la prima volta che mi sento davvero di approfondire Entity Framework (ho bloccato principalmente a Linq to Sql), e questo è tutto in esecuzione sul Codice Prima CTP rilasciato la scorsa settimana. Detto questo, c’è qualcosa che sto facendo di sbagliato, o di un problema noto, che può essere lavorato in giro?

  • Hai ragione, mysql provider non esiste (stackoverflow.com/questions/76488/…). È possibile che il CTP bit sono bug o che MySQL provider manca functinoality (o entrambi).
  • siete in grado di utilizzare la semplice appartenenza MVC 4 con MySQL?
InformationsquelleAutor Dusda | 2010-07-19



3 Replies
  1. 26

    Destra, finalmente lavorare con alcuni punti di interesse.

    • Possibile creare un DB, deve esistere già
    • È necessario creare una stringa di connessione per ogni DB concorso utilizzando il DBContext nome (nell’esempio sopra una connectionstring deve esistere con il nome di “NerdDinners”), non appena uno di default (altrimenti utilizzare SQL)
    • Verrà utilizzato il nome del DBSet nome utilizzato per definire il contesto, in quanto il nome della tabella, in modo da essere attenti quando la loro denominazione.

    Tutto sommato, una lunga strada, ma c’, alla fine,

    **Aggiornamento
    Un altro punto da notare, durante la distribuzione di MVC sito utilizzando MySQL sarà più come necessario aggiungere anche un DataFactory per il web.config.
    Perché di solito la differenza di MySql connettori là fuori e le versioni di MySQL che sono supportati.
    (risposta da parte di altre fonti dopo molto grattarsi testa)
    Basta aggiungere:

      <system.data> 
        <DbProviderFactories> 
          <add name="MySQL Data Provider"
               invariant="MySql.Data.MySqlClient"
               description=".Net Framework Data Provider for MySQL"
               type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
        </DbProviderFactories> 
      </system.data>

    Come una separata sezione per il web.config assicurarsi di impostare il numero di versione del MySQL.Data.dll si distribuisce con il sito (che è anche una buona idea per “copia locale” MySQL Dll per garantire la compatibilità.

    • Segnate la vostra, come la risposta, dal momento che hai trovato un modo :). Impressionante!
    • Non è necessario creare le tabelle di te o generare le tabelle?
    • Entity framework ancora non è possibile creare tabelle purtroppo, quindi dovrete farlo voi (anche nota su alcuni host tablenames e colonna i nomi sono case-sensitive).
    • Un lavoro in giro, però, è quello di testare e generare il DB, tramite SQL Express o SQL CE, e quindi il dump la creazione di script per il DB. è quindi possibile eseguire che su MySQL per creare il DB (avendo cura di non postare tsql differenze)
    • Puoi chiarire “verrà utilizzato il nome del DBSet nome utilizzato per definire il contesto, in quanto il nome del tavolo”? Sul lato SQL Server, utilizza il nome del Modello (nome della Classe), pluralizzata, se si lascia che la Convenzione attivata. Stai dicendo in MySQL utilizza il nome della proprietà, si assegna il DbContext a che DbSet invece? Che sembra una strana e arbitrario cambiamento di approccio…
    • Grazie, Sopra ha funzionato per me in Codice del Primo approccio. Solo una nota, stavo usando una versione diversa di MySql.Assemblea di dati, così appena cambiato la Versione 6.3.6.0 alla Versione=6.4.4.0

  2. 2

    Un altro punto di interesse – Se si aggiunge il “MySQL Fornitore di Dati” voce per la vostra macchina locale.config (C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config nel mio caso) si può quindi connettersi a MySql istanza di Visual Studio…

  3. 2

    Questa domanda e la risposta è stata molto utile per me la migrazione di una maggiore EF progetto da SQL a mySQL così ho pensato di aggiungere il mio note e la speranza sono utili:

    Come ha notato il nome della stringa di connessione deve coincidere con il nome della Classe che estende il Sistema.Dati.Entità.DbContext.

    Ci sembra ancora nessun modo per creare tabelle in EF usare il mySQL connector, ma è possibile utilizzare e modificare il codice SQL creare script per generare tabelle mySQL. Il modo più semplice che ho trovato per fare questo è stato il commento e la OnModelCreating funzione estesa DbContext a seconda se il codice è stato necessario ricreare le tabelle. Se mi trovo a fare questo più spesso ho intenzione di risolvere questo problema utilizzando la dependency injection e sono separata classi basate su mySQL o MSSQL configurazione.

    L’ho trovato più facile per assicurarsi che il dev scatole e server avuto la giusta mySQL connector .dll confezionato nel rilascio di pasticciare con il DbFactoryProviders nel webconfig. Ottenere l’imballaggio corretto nel progetto/soluzione di creare un pacchetto significa che sono necessari solo la stringa di connessione linee e non il DbFactoryProviders linee che ho trovato per essere difficile lavorare in modo coerente in tutta una serie di macchine.

    Ho bisogno di modificare l’Identificatore mySQL Caso di Sensibilità da parte dell’impostazione che ho avuto di 0 a 1. Senza questa impostazione SQL che EF collegato potrebbe non trovare le tabelle che erano lì a causa del misto caso i nomi degli oggetti rispetto ai fissi caso di tabelle mySQL crea.

Lascia un commento