Aufwand löst InvalidOperationException aus: Sequenz enthält mehr als ein übereinstimmendes Element


Frage

Ich verwende Effort auf normale Weise, indem ich eine Verbindung erstelle und sie an DB Context weitergebe:

public class InMemoryContextInitializer
{
    public void BeforeAllTests()
    {
        Effort.Provider.EffortProviderConfiguration.RegisterProvider();
    }

    public DbConnection BeforeEachTest()
    {
        return Effort.DbConnectionFactory.CreateTransient();
    }

    public void AfterEachTest(DbConnection prevUsedConnection)
    {
        prevUsedConnection.Dispose();
    }
}

und so etwas:

public class InMemoryContextInitializer
{
    public void BeforeAllTests()
    {
        Effort.Provider.EffortProviderConfiguration.RegisterProvider();
    }

    public DbConnection BeforeEachTest()
    {
        return Effort.DbConnectionFactory.CreateTransient();
    }

    public void AfterEachTest(DbConnection prevUsedConnection)
    {
        prevUsedConnection.Dispose();
    }
}

Alle meine Bemühungen Tests gehen gut, außer einer, der dies wirft:

public class InMemoryContextInitializer
{
    public void BeforeAllTests()
    {
        Effort.Provider.EffortProviderConfiguration.RegisterProvider();
    }

    public DbConnection BeforeEachTest()
    {
        return Effort.DbConnectionFactory.CreateTransient();
    }

    public void AfterEachTest(DbConnection prevUsedConnection)
    {
        prevUsedConnection.Dispose();
    }
}

Ich benutze mehrere DB-Kontexte in diesen Tests und es funktioniert alles außer in diesem Fall:

public class InMemoryContextInitializer
{
    public void BeforeAllTests()
    {
        Effort.Provider.EffortProviderConfiguration.RegisterProvider();
    }

    public DbConnection BeforeEachTest()
    {
        return Effort.DbConnectionFactory.CreateTransient();
    }

    public void AfterEachTest(DbConnection prevUsedConnection)
    {
        prevUsedConnection.Dispose();
    }
}

In der Tat wird jede Operation in diesem Kontext wie Add geworfen.

Ich konnte niemanden finden, der dasselbe Problem auf der Effort-Website hatte oder googeln konnte. Vielleicht ist es ein Fehler? Ich benutze die neueste Version von Effort - 1.1.4 und Entity Framework - 6.1.3.

Ich habe nach etwas Besonderem über DbContext oder die Entity-Klasse gesucht und nichts gefunden.

Beliebte Antwort

Ich hatte dieses Problem und stellte fest, dass die Verwendung einer separaten Verbindung ( Effort.DbConnectionFactory.CreatePersistent ) für jeden Kontext das Problem löste.

In meinem Fall läuft jeder Kontext über völlig unterschiedliche Tabellen, daher sollte es keinen Konflikt in "Aufwand / Nemory" gegeben haben - also denke ich, dass der Fehlerbericht gut ist - aber diese Information kann Leute in der Zwischenzeit entsperren.

Die Abwägung ist, dass dies Sie warnen könnte, dass Sie tatsächlich zwei Kontexte haben, die am gleichen Tisch arbeiten, was schlecht wäre - Sie müssen also auch darauf achten.





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum