EF6 und mehrere Konfigurationen (SQL Server und SQL Server Compact)
Update: Problem gelöst, siehe am Ende der Frage.
Das problem:
Wir versuchen mit Entity Framework 6 und code-basierte Konfiguration in einem Szenario waren, haben wir beide verwenden eine SQL Server-und SQL Server CE in der gleichen AppDomain
.
Dieses sehr einfache Szenario scheint nicht unterstützt zu werden "by design". Vom EF-team:
Beachten Sie: Wir unterstützen nicht mehrere-Klassen-Konfiguration eingesetzt
der gleichen AppDomain. Wenn Sie dieses Attribut festlegen, verschiedene
Konfiguration Klassen für zwei Kontexte, wird eine Ausnahme geworfen.
Mehr Informationen hier: Code-basierte Konfiguration (Codeplex)
Die Frage:
Wie wir uns vorwärts bewegen, von hier aus? Jede Hilfe wäre sehr geschätzt werden! Gibt es eine flexiblere Art und Weise zu verbinden, eine Konfiguration zu einem Kontext statt eines AppDomain
?
(Unser Kontext-Klassen befinden sich in verschiedenen Baugruppen. Wir haben versucht, die DbConfigurationType
Attribut aber das problem ist, EF selbst)
Konfigurationsdateien:
Konfiguration für normalen SQL-server
public class EfConfiguration : DbConfiguration
{
public EfConfiguration()
{
SetProviderServices(
SqlProviderServices.ProviderInvariantName,
SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}
Konfiguration für SQL Server Compact Edition
public class EfCeConfiguration : DbConfiguration
{
public EfCeConfiguration()
{
SetProviderServices(
SqlCeProviderServices.ProviderInvariantName,
SqlCeProviderServices.Instance);
SetDefaultConnectionFactory(
new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName));
}
}
UPDATE:
Die Fehler, die wir bekommen, ist:
System.TypeInitializationException : Der typeninitialisierer für
"MyProject.Repositories.Base.DataContext'
warf eine Ausnahme. ----> System.InvalidOperationException :
Instanz von 'EfCeConfiguration' gesetzt wurde, aber diese Art war nicht
entdeckt in der gleichen assembly wie die "DataContext" - Kontext. Entweder
setzen Sie die DbConfiguration-Typ in der gleichen assembly wie die DbContext
Art, Nutzung DbConfigurationTypeAttribute auf die DbContext-Typ
geben Sie die DbConfiguration-Typ, oder legen Sie die DbConfiguration geben
die config-Datei. Sehen http://go.microsoft.com/fwlink/?LinkId=260883 für
mehr Informationen.
UPDATE 2, die Lösung
Wie oben beschrieben, wir können nur eine Konfiguration. Dies ist ein problem, da Sql, SqlCe nutzt unterschiedliche Anbieter. Wenn wir "SetDefaultConnectionFactory" zu passen, eine Art von Datenbank, die anderen werden scheitern.
Stattdessen liefern die Verbindung in den Kontext, wie beschrieben im post markiert als Antwort unten. Sobald Sie immer initialisieren des Kontexts mit einer Verbindung im Gegensatz zu einem connectionstring Sie sind gut zu gehen. Sie können entfernen Sie die SetDefaultConnectionFactory Anruf von der Konfiguration. Wir haben es nur mit den code unten für die Konfiguration des SqlCe Kontext und ist keine Konfiguration für die Sql-Kontext.
public class CommonEfConfiguration : DbConfiguration
{
public CommonEfConfiguration()
{
//EF does not know if the ce provider by default,
//therefore it is required to be informed about it.
//The connection factories are not necessary since the connection
//is always created in the UnitOfWork classes
SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance);
}
}
InformationsquelleAutor der Frage Henrik Carlsson | 2013-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: basierend Auf Error details:
Haben Sie bereits versucht, sagen, EF, wo die config-Klasse gefunden wird?
Wenn das nicht gemacht zu arbeiten, und dann sehen, alternative
Kontext mit Konstruktor DbConnection
müssen Sie dann eine "DBConnection" - Verbindung für jeden Anbieter.
Für SQL server
wiederholen Sie den Vorgang für SqlCe Fabrik, es kann auch erzeugen eine DBConnection
SqlCe Anknüpfungspunkt Verbindung erstellen
InformationsquelleAutor der Antwort phil soady
was ich getan habe:
InformationsquelleAutor der Antwort havalli
Fand ich die Lösung in ein Beitrag in einem Microsoft-forum posten.
Im Grunde hatte ich zwei Projekte, die jeweils mit Ihren eigenen Kontext. Entity Framework geladen hat, nur (die ersten) eine der DbConfiguration-Klassen und versuchen, mit dieser Konfiguration für beide Projekte. Das ist der Grund für die Fehlermeldung sagt etwas wie
So, als schlug jemand vor, in das Microsoft-forum posten, ich entfernte alle
[DbConfigurationType(typeof(DbConfigurationClass))]
anotations aus den Klassen, die Erben von DbContext in beiden Projekten, und die Fehler nicht mehr passieren.InformationsquelleAutor der Antwort Ulysses Alves