Gleiche Anwendung, verschiedene Datenbanken: Entity Framework 6.X + MySQL + SQL Server

Gestern habe ich eine Migration (EF 5.0 => EF 6.0) einer Webanwendung durchgeführt, die ein Entity-Framework verwendet, um auf MySQL- und SQL Server-Datenbanken zuzugreifen (insbesondereDbContext zu bestimmten Datenbanken, NICHT zu irgendwelchenDbContext zu jeder Art von Datenbank).

Kompilierzeit Dinge wurden ohne Probleme gemacht, Laufzeit konfrontiert mich mit Ausnahme:

Die Standardinstanz DbConfiguration wurde vom Entity Framework verwendet, bevor der Typ 'MySqlEFConfiguration' erkannt wurde.

Das[DbConfigurationType(typeof(MySqlEFConfiguration))]as @ -Attribut für den Kontext scheint zur Laufzeit ignoriert worden zu sein, da sich der Kontext in einer externen Assembly (?) befindet und dasDbConfiguration wird stattdessen global für die Anwendungsdomäne verwendet, nicht kontextspezifisch (?). "

Ich habe verschiedene Lösungsansätze ausprobiert, dann gegoogelt und - überraschend - keine funktionierende Lösung gefunden.

Sieht aus wie Situation beschrieben hier gut geformthttp: //forums.mysql.com/read.php? 174,614148,614148 immer noch nicht geändert, oder ich habe einige offensichtliche Dinge verpasst.

Jede Rückmeldung wird gebeten.

Danke im Voraus

DETAILLIERTE BESCHREIBUNG

Input (vereinfacht): - ASP.NET-Webanwendung

Datenzugriffsebene implementiert über Entity Framework 6.1.1

Entity Framework-Anbieter:

System.Data.SqlClient 6.1.1

MySql.Data.MySqlClient 6.9.4

MY_SqlContext, Modell des ersten Konzepts, ausgerichtet auf MY SQL Server-Datenbank

Ms_SqlContext, erstes Datenbankkonzept, ausgerichtet auf die MS SQL Server-Datenbank

Nach allgemeiner Dokumentation zu Entity Framework 6 und MySql Connector / Net http: //dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.htm), MY_SqlContext erfordert, dass MySqlEFConfiguration angewendet wird.

Nach den beiden oben genannten Dokumentationen gibt es drei Möglichkeiten, dies zu tun. Alle drei wurden versucht und sind gescheitert.

Option : Hinzufügen des DbConfigurationTypeAttribute[DbConfigurationType(typeof(MySqlEFConfiguration))] zu MY_SqlContext class

Entsprechende 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=&quot;data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>

<entityFramework>
    <defaultConnectionFactory t,ype="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>

Nachdem die Anwendung gestartet wurde und die Webanfragen verarbeitet wurden:

Ms_SqlContext funktioniert einwandfrei, aber wenn ich versuche, eine MY_SqlContext-Instanz zu erstellen, erhalte ich die Ausnahme:

Die Standardinstanz DbConfiguration wurde vom Entity Framework verwendet, bevor der Typ 'MySqlEFConfiguration' erkannt wurde. Eine Instanz von 'MySqlEFConfiguration' muss beim Anwendungsstart festgelegt werden, bevor Entity Framework-Funktionen verwendet werden, oder sie muss in der Konfigurationsdatei der Anwendung registriert sein. Weitere Informationen finden Sie unter ... LinkId = 260883. "

Option : Aufruf von DbConfiguration.SetConfiguration (new MySqlEFConfiguration ()) beim Start der Anwendung

Entsprechende Web.config-Segmente (genau wie Option 1):

<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=&quot;data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...&quot;"
         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 zu Global.asax.cs: private void Application_Start (Objektabsender, EventArgs e) {DbConfiguration.SetConfiguration (new MySqlEFConfiguration ()); ...

Nach dem Start der Anwendung und dem Beginn der Verarbeitung von Webanforderungen beim Versuch, eine Ms_SqlContext-Instanz zu erstellen, wird die folgende Ausnahme angezeigt:

Eine Instanz von 'MySqlEFConfiguration' wurde festgelegt, dieser Typ wurde jedoch nicht in derselben Assembly wie der Kontext 'Ms_SqlContext' erkannt. Setzen Sie den DbConfiguration-Typ in dieselbe 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. Weitere Informationen finden Sie unter ...? LinkId = 260883.

Option 3: Legen Sie den DbConfiguration-Typ in der Konfigurationsdatei fest.

Entsprechende 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=&quot;data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...&quot;"
         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 dem Start der Anwendung und dem Beginn der Verarbeitung von Webanforderungen: ... Ms_SqlContext-Instanz wird erstellt, aber während der ersten Ausführung der Abfrage wird die Ausnahme angezeigt:

EntityException: {"Der zugrunde liegende Anbieter ist beim Öffnen fehlgeschlagen."}

InnerException: {"Es kann keine Verbindung zu einem der angegebenen MySQL-Hosts hergestellt werden."}

So, Ms_SqlContext erhält eine MySql-Konfiguration, die offensichtlich falsch ist.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage