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);
        }
    }
Kommentar zu dem Problem
Ich bin ein bisschen verwirrt-ich habe zwei Datenbanken in zwei separate C# - Projekte (Baugruppen), jede mit Ihrer eigenen Konfiguration und hatte nie irgendwelche Probleme überhaupt. Kommentarautor: Kirk Woll
Kirk: Sie Sind mit EF6 und führen Sie Sie in den gleichen App-Domäne? Wir verwenden nunit und durchführen Integrationstest zwischen zwei Systemen, sondern Sie als eine. Fein gearbeitet in EF5, wo man es nicht angeben müssen die Anbieter in configuraton. Kommentarautor: Henrik Carlsson
Ja, und ja. Was tatsächliche Fehler sind, die Sie erleben? Kommentarautor: Kirk Woll
@kirk Entdeckung der DBConfiguration, wenn es verwendet wird, ist die Frage. Vielleicht ist dein Szenario hat alle Stücke in der richtigen Montage für die automatische Erkennung. Wenn DBConfig-Klassen verwendet werden, sind in der gleichen assembly 🙁 kommt noch Kommentarautor: phil soady
@kirk: Gibt mir Hoffnung, dass Sie gelöst haben! 🙂 Ich habe den Fehler in einem update in Frage. Kommentarautor: Henrik Carlsson

InformationsquelleAutor der Frage Henrik Carlsson | 2013-12-03

Schreibe einen Kommentar