Gestern habe ich Migration (EF 5.0 => EF 6.0) der Webanwendung, die Entity Framework verwendet, um MySql und SQL Server-Datenbanken zu erreichen (insbesondere DbContext
zu bestimmten Datenbanken, keine DbContext
zu jeder Art von Datenbank).Gleiche Anwendung, verschiedene Datenbanken: Entity Framework 6.X + MySQL + SQL Server
Compile Zeit, die Dinge wurden ohne Probleme getan, Laufzeit konfrontiert mich mit Ausnahme:
Der Standard DbConfiguration Instanz durch das Entity Framework vor der ‚MySqlEFConfiguration‘ Typ entdeckt wurde verwendet.
Das [DbConfigurationType(typeof(MySqlEFConfiguration))]
Attribut im Kontext erscheint zur Laufzeit ignoriert worden zu sein, weil der Kontext in einer externen Baugruppe ist (?) Und die DbConfiguration
verwendete stattdessen auf die Anwendungsdomäne global, nicht die spezifisch für den Kontext (?).“
ich habe versucht, verschiedene Ansätze, es zu beheben, gegoogelt es dann und - Überraschung -. keine funktionierende Lösung finden
Sieht aus wie beschrieben Situation hier gut ausgebildet http://forums.mysql.com/read.php?174,614148,614148 noch nicht geändert, oder vermisste ich einige offensichtliche Dinge
Jede Rückmeldung wird geschätzt.
Vielen Dank im Voraus!
AUSFÜHRLICHE BESCHREIBUNG:
Input (vereinfacht): - ASP.NET Web Application
Zugriffsdatenschicht über Entity Framework implementiert 6.1.1
Entity Framework-Anbieter:
System.Data.SqlClient 6.1.1
MySql.Data.MySqlClient 6.9.4
MY_SqlContext, Modell erstes Konzept, gezielt zu MY SQL Server-Datenbank
Ms_SqlContext, erstes Konzept der Datenbank, Ziel der MS SQL Server-Datenbank
Entsprechend der allgemeinen Dokumentation von Entity Framework 6 und der MySql Connector/Net-Dokumentation (http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html), MY_SqlContext erfordert, dass MySqleEFConfiguration angewendet wird.
Gemäß den beiden obigen Dokumentationen gibt es drei Möglichkeiten, dies zu tun. Alle drei wurden versucht und versagt.
Option 1: Hinzufügen des DbConfigurationTypeAttribute [DbConfigurationType(typeof(MySqlEFConfiguration))]
zu MY_SqlContext Klasse
Geeignete Web.config Segmente:
<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>
Nach Anwendung gestartet und Web-Anfragen beginnen Verarbeitung:
Ms_SqlContext funktioniert gut, aber Beim Versuch, eine MY_SqlContext-Instanz zu erstellen, erhalte ich die Ausnahme:
Die standardmäßige DbConfiguration-Instanz wurde vom Entity Framework verwendet, bevor der Typ 'MySqlEFConfiguration' erkannt wurde. Eine Instanz von 'MySqlEFConfiguration' muss beim Anwendungsstart festgelegt werden, bevor Entity Framework-Features verwendet werden oder in der Konfigurationsdatei der Anwendung registriert werden muss. Siehe ... LinkId = 260.883 für weitere Informationen „
Option 2. Der Aufruf DbConfiguration.SetConfiguration (neu MySqlEFConfiguration()) am Start der Anwendung
Geeignete Web.config Segmente (wie bei Option 1, tatsächlich):
<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>
Code hinzugefügt Global.asax.cs: private void Application_Start (object sender, EventArgs e) { DbConfiguratio n.SetConfiguration (neu MySqleEFConfiguration()); ...
Nach Anwendung gestartet und Web-Anfragen beginnen Verarbeitung eine Ms_SqlContext Instanz zu erstellen versuchen, erhalte ich die Ausnahme:
Eine Instanz von ‚MySqlEFConfiguration‘ gesetzt wurde, aber diese Art in der nicht entdeckt wurde selbe Assembly wie der 'Ms_SqlContext' Kontext. Setzen Sie den DbConfiguration-Typ in derselben Assembly wie den DbContext-Typ, verwenden Sie DbConfigurationTypeAttribute für den DbContext-Typ, um den DbConfiguration-Typ anzugeben, oder legen Sie den DbConfiguration-Typ in der Konfigurationsdatei fest. Siehe ...? LinkId = 260883 für weitere Informationen.
Option 3: Stellen Sie den DbConfiguration Typ in der Konfigurationsdatei beginnen
Geeignete Web.config Segmente
<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>
Nach Anwendung gestartet und Web-Anfragen Verarbeitung: ... Ms_SqlContext Instanz wird erstellt, aber während der ersten Abfrageausführung erhalte ich die Ausnahme:
EntityException: { "Der zugrunde liegende Anbieter schlug fehl auf Öffnen."}
Innerexception: { "Kann nicht eine der angegebenen MySQL Hosts verbinden"}
So Ms_SqlContext erhalten MySql Konfiguration, ist offensichtlich falsch.
Option 3 es – wodzu