Ieri ho eseguito la migrazione (EF 5.0 => EF 6.0) dell'applicazione Web che utilizza il framework entità per raggiungere database MySql e SQL Server (particolare DbContext
a particolari database, NON uno qualsiasi DbContext
per qualsiasi tipo di database).Stessa applicazione, diversi database: Entity framework 6.X + MySQL + SQL Server
cose fase di compilazione sono state fatte senza problemi, run-time mi ha affrontato con l'eccezione:
L'impostazione predefinita esempio DbConfiguration è stato utilizzato da Entity Framework prima del tipo 'MySqlEFConfiguration' stato scoperto.
L'attributo [DbConfigurationType(typeof(MySqlEFConfiguration))]
sul contesto sembra essere stato ignorato in fase di esecuzione, perché il contesto è in un assembly esterno (?) E il DbConfiguration
utilizzato invece è globale per il dominio di applicazione, non il specifica al contesto (?)."
ho provato diversi approcci per risolvere il problema, quindi su google e - sorpresa -. trovare alcuna soluzione di lavoro
Sembra situazione descritta ben formato qui http://forums.mysql.com/read.php?174,614148,614148 ancora non è cambiato, o perso alcune cose ovvie
Qualsiasi feedback sarà apprezzato.
Grazie in anticipo!
DESCRIZIONE DETTAGLIATA:
ingresso (semplificato): - ASP.NET Web Application layer di accesso
dati implementato su Entity Framework 6.1.1
Entity Fornitori di framework:
System.Data.SqlClient 6.1.1
MySql.Data.MySqlClient 6.9.4
MY_SqlContext, il modello primo concetto, mirato al mio database SQL Server
Ms_SqlContext, primo concetto del database, destinato al database MS SQL Server
Secondo la documentazione generica di Entity Framework 6 e MySQL Connector/Net documentazione (http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html), MY_SqlContext richiede MySqlEFConfiguration da applicare.
Secondo entrambe le documentazioni, di cui sopra, ci sono tre opzioni per farlo. Tutti e tre sono stati provati e falliti.
Opzione 1: Aggiunta del DbConfigurationTypeAttribute [DbConfigurationType(typeof(MySqlEFConfiguration))]
alla classe MY_SqlContext
segmenti Web.config appropriati:
<connectionStrings>
<add name="MY_SqlContext"
connectionString="server=.;User Id=root;password=...;Persist Security Info=True;database=MySqlDb;Use Compression=False;Use Old Syntax=False"
providerName="MySql.Data.MySqlClient" />
<add name="Ms_SqlContext"
connectionString="metadata=res://*/Ms_SqlContext.csdl|res://*/Ms_SqlContext.ssdl|res://*/Ms_SqlContext.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...""
providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Dopo l'avvio delle applicazioni e le richieste web iniziare l'elaborazione:
Ms_SqlContext funziona bene, ma cercando di creare un'istanza MY_SqlContext, ottengo l'eccezione:
L'istanza predefinita di DbConfiguration è stata utilizzata da Entity Framework prima che fosse scoperto il tipo "MySqlEFConfiguration". Un'istanza di "MySqlEFConfiguration" deve essere impostata all'avvio dell'applicazione prima di utilizzare qualsiasi funzionalità di Entity Framework o deve essere registrata nel file di configurazione dell'applicazione. Vedi ... LinkId = 260.883 per ulteriori informazioni "
Opzione 2:. Calling DbConfiguration.SetConfiguration (nuova MySqlEFConfiguration()) all'avvio dell'applicazione
segmenti Web.config appropriati (lo stesso di opzione 1, in realtà):
<connectionStrings>
<add name="MY_SqlContext"
connectionString="server=.;User Id=root;password=...;Persist Security Info=True;database=MySqlDb;Use Compression=False;Use Old Syntax=False"
providerName="MySql.Data.MySqlClient" />
<add name="Ms_SqlContext"
connectionString="metadata=res://*/Ms_SqlContext.csdl|res://*/Ms_SqlContext.ssdl|res://*/Ms_SqlContext.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...""
providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
codice, aggiunto al Global.asax.cs: private void Application_Start (object sender, EventArgs e) { DbConfiguratio n.SetConfiguration (new MySqlEFConfiguration()); ...
Dopo l'avvio delle applicazioni e le richieste web cominciano elaborazione cercando di creare un'istanza di Ms_SqlContext, ottengo l'eccezione:
Un'istanza di 'MySqlEFConfiguration' stato impostato ma questo tipo non è stato scoperto nel stesso assembly del contesto "Ms_SqlContext". Inserire il tipo DbConfiguration nello stesso assembly del tipo DbContext, utilizzare DbConfigurationTypeAttribute sul tipo DbContext per specificare il tipo DbConfiguration o impostare il tipo DbConfiguration nel file di configurazione. Vedi ...? LinkId = 260883 per ulteriori informazioni.
Opzione 3: Impostare il tipo DbConfiguration nel file di configurazione
segmenti Web.config appropriati
<connectionStrings>
<add name="MY_SqlContext"
connectionString="server=.;User Id=root;password=...;Persist Security Info=True;database=MySqlDb;Use Compression=False;Use Old Syntax=False"
providerName="MySql.Data.MySqlClient" />
<add name="Ms_SqlContext"
connectionString="metadata=res://*/Ms_SqlContext.csdl|res://*/Ms_SqlContext.ssdl|res://*/Ms_SqlContext.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...""
providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Dopo l'avvio delle applicazioni e le richieste web iniziare l'elaborazione: ... Ms_SqlContext l'istanza viene creata, ma durante l'esecuzione della prima query, ottengo l'eccezione:
EntityException: { "Il provider sottostante fallito su Apri."}
InnerException: { "Impossibile connettersi a qualsiasi degli host MySQL specificate"}
Quindi, Ms_SqlContext ottenere configurazione di MySQL che è ovviamente sbagliato.
opzione 3 fissata per me, thx – wodzu