Lo sforzo genera InvalidOperationException: la sequenza contiene più di un elemento corrispondente

c# effort entity-framework

Domanda

Sto usando Effort in modo regolare creando una connessione e passandola a DB Context:

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

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

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

e qualcosa del genere:

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

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

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

Tutti i miei test di sforzo passano bene, tranne uno che lancia questo:

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

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

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

Io uso più contesti DB in questi test e tutto funziona tranne per questo caso:

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 effetti qualsiasi operazione su questo contesto come Add verrà lanciata.

Non sono riuscito a trovare nessuno con lo stesso problema sul sito Web di Effort o su Google. Forse è un bug? Sto usando l'ultima versione di Effort - 1.1.4 e Entity Framework - 6.1.3.

Ho controllato qualsiasi cosa speciale su DbContext o la classe di entità e non ho trovato nulla.

Risposta popolare

Ho riscontrato questo problema e ho scoperto che l'utilizzo di una connessione separata ( Effort.DbConnectionFactory.CreatePersistent ) per ogni contesto risolveva il problema.

Nel mio caso, ogni contesto opera su tabelle completamente diverse, quindi non ci dovrebbe essere stato un conflitto in Effort / NMemory - quindi penso che il bug report sia valido - ma questa informazione potrebbe sbloccare le persone nel frattempo.

Il compromesso è che questo potrebbe avvisarti che in realtà hai due contesti che operano sulla stessa tabella, il che sarebbe negativo, quindi dovrai fare attenzione anche a questo.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché