Effort lève InvalidOperationException: la séquence contient plus d'un élément correspondant


Question

J'utilise Effort de manière régulière en créant une connexion et en la passant à 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();
    }
}

et quelque chose comme ça:

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

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

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

Tous mes tests d'effort réussissent très bien sauf un qui jette ceci:

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

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

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

J'utilise plusieurs contextes de base de données dans ces tests et tout fonctionne sauf dans ce cas:

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

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

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

En fait, toute opération sur ce contexte comme Add lancera.

Je n'ai trouvé personne ayant le même problème sur le site Web d'Effort ou sur Google. Peut-être que c'est un bug? J'utilise la dernière version d'Effort - 1.1.4 et d'Entity Framework - 6.1.3.

J'ai vérifié l'existence de quelque chose de spécial à propos de DbContext ou de la classe d'entité et je n'ai rien trouvé.

Réponse populaire

J'avais ce problème et j'ai constaté que l'utilisation d'une connexion distincte ( Effort.DbConnectionFactory.CreatePersistent ) pour chaque contexte permettait de résoudre le problème.

Dans mon cas, chaque contexte opère sur des tables totalement différentes, il n'y aurait donc pas dû y avoir de conflit dans Effort / NMemory - je pense donc que le rapport de bogue est valable - mais cette information peut débloquer des personnes entre-temps.

Le problème, c'est que cela pourrait vous avertir que deux contextes opèrent sur la même table, ce qui serait mauvais - vous devrez donc faire attention à cela aussi.





Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi