Sie sollten sehen diese ähnliche SO-Frage . Ich bin mir nicht sicher, ob dies zur Laufzeit möglich ist, aber ich habe festgestellt, dass dies nach der Bereitstellung möglich ist. Aber Vorsicht, es gibt definitiv Fallstricke.
Die Hauptunterschiede zwischen EDMX-Dateien, die von verschiedenen Datenbank-Backends erzeugt werden, sind die MSL und die SSDL. Ich habe die EDMX-Datei für jede Datenbank separat erstellt. Sie haben beide dasselbe logische Datenmodell (CSDL). Dann extrahiere ich die MSL- und SSDL-Datei und speichere sie in getrennten Dateien. Danach können Sie in Ihrer Verbindungszeichenfolge den genauen Speicherort dieser Dateien angeben (wie gezeigt):
<add name="DBConnection" connectionString="metadata=C:\sqlServerEntities.csdl|C:\sqlServerEntities.ssdl|C:\sqlServerEntities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=[machinename];Initial Catalog=[databasename];Persist Security Info=True;User ID=[user];Password=[password];MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="DBConnection" connectionString="metadata=C:\mdbEntities.csdl|C:\mdbEntities.ssdl|C:\mdbEntities.msl;provider=[mdb provider namespace];provider connection string=[DB connection string]" providerName="System.Data.EntityClient" />
Je nachdem, mit welcher Datenbank Sie sich verbinden, müssen Sie zur Laufzeit die entsprechende Verbindungszeichenfolge verwenden. Ich befürchte, dass Sie Schwierigkeiten haben könnten, gespeicherte Prozeduren in einem Szenario zu verwenden und tabellenbasiertes Mapping in dem anderen jedoch.
Ein weiterer Hinweis: Sie können nicht beide EDMX-Modelle in Ihrem Projekt belassen, da sonst Compilerfehler auftreten (aufgrund doppelter Klassendefinitionen). Sie müssen jedoch eines der Modelle in Ihrem Projekt belassen, damit der Compiler weiß, welche logischen Klassen erzeugt wurden.
1 Stimmen
Ryan, hatten Sie viel Erfolg mit der hier akzeptierten Antwort? In Anbetracht der konzeptionellen Trennung klingt es plausibel, aber es würde mich überraschen, wenn alles glatt laufen würde.