Imansible recuperare i metadati

MVC4 + Entity Framework 4.4 + MySql + POCO / Code Primo

Sto configurando la configurazione di cui sopra .. ecco le mie classi:

namespace BTD.DataContext { public class BTDContext : DbContext { public BTDContext() : base("name=BTDContext") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //modelBuilder.Conventions.Remove(); } public DbSet Products { get; set; } public DbSet ProductImages { get; set; } } } namespace BTD.Data { [Table("Product")] public class Product { [Key] public long ProductId { get; set; } [DisplayName("Manufacturer")] public int? ManufacturerId { get; set; } [Required] [StringLength(150)] public string Name { get; set; } [Required] [DataType(DataType.MultilineText)] public string Description { get; set; } [Required] [StringLength(120)] public string URL { get; set; } [Required] [StringLength(75)] [DisplayName("Meta Title")] public string MetaTitle { get; set; } [DataType(DataType.MultilineText)] [DisplayName("Meta Description")] public string MetaDescription { get; set; } [Required] [StringLength(25)] public string Status { get; set; } [DisplayName("Create Date/Time")] public DateTime CreateDateTime { get; set; } [DisplayName("Edit Date/Time")] public DateTime EditDateTime { get; set; } } [Table("ProductImage")] public class ProductImage { [Key] public long ProductImageId { get; set; } public long ProductId { get; set; } public long? ProductVariantId { get; set; } [Required] public byte[] Image { get; set; } public bool PrimaryImage { get; set; } public DateTime CreateDateTime { get; set; } public DateTime EditDateTime { get; set; } } } 

Ecco la mia configurazione web.config …

    
  1. Le tabelle del database AND esistono già …
  2. Sono ancora abbastanza nuovo con mvc, ma stavo usando questo tutorial

L’applicazione si sviluppa bene … tuttavia quando provo ad aggiungere un controller usando Product (BTD.Data) come class del modello e BTDContext (BTD.DataContext) come class di contesto dei dati, ricevo il seguente errore:

Imansible recuperare i metadati per BTD.Data.Product che utilizza lo stesso DbCompiledModel per creare il contesto con tipi diversi di server di database non supportati. Invece, creare un DbCompiledModel separato per ogni tipo di server utilizzato.

Sono a una perdita completa – Ho setacciato Google con quasi tutte le diverse varianti di quel messaggio di errore sopra a cui riesco a pensare, ma senza successo.

Ecco le cose che posso verificare …

  1. MySql funziona correttamente
  2. Sto usando MySql Connector versione 6.5.4 e ho creato altre forms web ASP.net + applicazioni framework entity framework con problemi ZERO

Ho anche provato a includere / rimuovere questo nel mio web.config:

      

Ho letteralmente lavorato a questo bug per giorni – Sono al punto ora che sarei disposto a pagare qualcuno per risolverlo .. non è uno scherzo … Mi piacerebbe davvero usare MVC 4 e Razor – I ero così entusiasta di iniziare su questo, ma ora sono abbastanza scoraggiato – apprezzo davvero ogni aiuto / guida su questo!

Nota anche – sto usando Entityframework da Nuget …

Un’altra nota

Stavo usando il modello di Visual Studio predefinito che crea il tuo progetto MVC con le pagine dell’account e altre cose. Ho rimosso TUTTI i riferimenti ai file aggiunti perché stavano cercando di usare “DefaultConnection” che non esisteva, quindi ho pensato che quei file potessero essere l’errore che stava causando, ma comunque non li ho trovati dopo averli rimossi –

Volevo solo far sapere a tutti che sto usando il modello di progetto MVC di Visual Studio che pre-crea un mucchio di file. Cercherò di ricreare tutto questo da un progetto vuoto MVC che non ha quei file – aggiornerò questa volta una volta che ho provato che

AGGIORNAMENTO ALL’USO VS MVC Modello base: lo stesso errore è risultato – ancora nessuna soluzione

UN’ALTRA PERSONA CHE SPERIMENTA LO STESSO PROBLEMA

Proprio qui è un’altra domanda StackOverflow che imita il mio – tuttavia ho provato la sua soluzione senza alcun risultato – forse qualcun altro che sta avendo lo stesso problema può beneficiare del collegamento

AGGIORNARE

Recentemente ho appena provato a inserire questo in MS Sql Server e l’impalcatura vista aggiunge bene senza errori – quindi non sono sicuro se il mio database MySql o stringa di connessione o cosa … mi fa impazzire ..

Altre referenze

Sembra che qualcun altro abbia gli stessi problemi che io sono – l’unica differenza è che stanno usando SQL Server – Ho provato a modificare tutto il mio codice per seguire i suggerimenti su questa domanda / risposta StackOverflow qui, ma ancora inutilmente

POSSIBILE FISSARE ???

Quindi questo è strano … dopo averlo collegato a MS Sql Server e aver aggiunto il controller, quindi ripristinando la stringa di connessione a MySql, in realtà funziona con MySql … che diamine! ??

Quindi sembra che quando si tenta di aggiungere il controller e il ponteggio della vista (è che la frase giusta?) Venga aggiunto CON la stringa di connessione mysql fallisce … tuttavia se lo si collega a un server sql db, si genera lo scaffolding / controller, quindi ripristinare la stringa di connessione mysql funziona ….?!?!

Sembra che lo scaffold del controller MVC4 non riconosca correttamente la stringa di connessione MySql. Modificare la stringa di connessione come mostrato di seguito durante la generazione del codice EF CRUD per i controller:

    

Passa di nuovo allo standard durante l’esecuzione dell’applicazione:

    

Nota il cambiamento, nome del fornitore.

L’imesh suggerisce quasi di risolvere il mio problema, ma in aggiunta ho una linea commentata temporanea

 [DbConfigurationType(typeof(MySqlEFConfiguration))] 

che era in class DBContext. E, naturalmente, dopo il controller di creazione questa riga dovrebbe essere decommentata e cambiare System.Data.SqlClient in MySql.Data.MySqlClient nel file di configurazione.

Utilizzo di VS 2013, connettore MySQL / NET 6.9.6, Entity Framework 6, Web API 2.2 e server MySQL 5.7 Ho dovuto combinare le risposte per evitare l’errore relativo a “Imansible recuperare i metadati”.

Per aggiungere correttamente un controller a un progetto .NET che utilizza una connessione MySQL, effettuare le seguenti operazioni:

  1. Aggiungete temporaneamente una stringa di connessione con System.Data.SqlClient come providerName e commentate quella per MySQL. Non importa se la stringa di connessione è valida.
  2. Assicurarsi che MySqlEFConfiguration non sia abilitato in alcun modo.
  3. Ribuild.

Riguardo al secondo punto, la documentazione di MySQL sull’uso di Connector / NET con EF6 indica tre possibili modi per abilitare MySqlEFConfiguration . Assicurarsi che nessuna di queste funzioni sia abilitata mentre si aggiungono controller utilizzando il modello VS.

  1. Aggiunta di DbConfigurationTypeAttribute nella class di contesto:

[DbConfigurationType(typeof(MySqlEFConfiguration))]

  1. Chiamata di DbConfiguration.SetConfiguration (nuova MySqlEFConfiguration ()) all’avvio dell’applicazione

  2. Impostare il tipo DbConfiguration nel file di configurazione:

Ho testato anche questo bug e ho visto un altro problema.

Il codice seguente è nel mio Web.config (senza, non funziona):

  

Modificato per:

  

Funziona per me … aggiungi l’impalcatura e poi cambiala

Ho avuto lo stesso problema usando EF 4.3.1 e MySql Connecter / Net 6.6.4.0

Questo ha funzionato per me, non è necessario connettersi a un diverso codice db o extra nella class Context.

Aggiungilo tra i tag entityFramework nel tuo file web.config quando vuoi build uno scaffold:

      

Quindi commentare il codice precedente quando si desidera eseguire le migrazioni e viceversa.

Quindi web.config sarà così:

         

Questo è abbastanza ridicolo su come gli sviluppatori .NET debbano passare attraverso alcuni arditi canvasi per far funzionare il loro codice.

Esempio di lavoro

https://github.com/dublinan/mvc-mysql-ef-example

Link al mio progetto github

Si prega di provare a utilizzare il

System.ComponentModel.DataAnnotations

namespace insieme all’attributo [Key] sui membri della class EDM.

Ha funzionato per me.