4 Stimmen

Mehrere Backends für Entity Framework

Kann ich zwei verschiedene Backends für ein .net Entity Framework Projekt verwenden?

Ich muss die volle Programmierbarkeit von gespeicherten Prozeduren auf SQL Server unterstützen, wenn diese verfügbar sind. Ich muss nur Tabellenstrukturen in einer .mdb-Datei unterstützen, wenn SQL Server nicht verfügbar ist.

Die gesamte Geschäftslogik oberhalb des Entity Frameworks verwendet die Entitätsabstriche und geht nicht direkt an die Datenbank. Das Entitätsmodell kann entweder gespeicherte Prozeduraufrufe oder dynamisches Sql zum Lesen/Schreiben in die Datenbanktabellen verwenden.

Ist es möglich, zwei logisch identische Entitätsmodelle mit jeweils unterschiedlichen Zuordnungen zur Datenbank zu erstellen (eines vom Framework, eines von gespeicherten Prozeduren verwaltet) und zur Laufzeit auf der Grundlage der vom Backend-Speichermechanismus bereitgestellten Funktionalität zwischen ihnen zu wechseln?

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.

2voto

YeahStu Punkte 3980

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=&quot;Data Source=[machinename];Initial Catalog=[databasename];Persist Security Info=True;User ID=[user];Password=[password];MultipleActiveResultSets=True&quot;" 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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X