Effort (C #) - "La séquence ne contient aucun élément correspondant" lors de l'ensemencement de données vers l'une de mes entités

c# effort entity-framework unit-testing

Question

J'essaie de créer des tests unitaires pour quelques appels de service Web dans mon projet. J'utilise Entity Framework 6.1.3 dans mon projet pour récupérer les données au niveau de la couche service (avec une approche code d'abord). J'ai fait des recherches sur la façon de simuler un objet DatabaseContext et j'ai découvert qu'Effort peut le faire.

J'ai suivi la documentation lors de l'implémentation de Effort dans mes tests unitaires, mais lorsque j'essaie d'incorporer des données à mes entités, une exception "System.InvalidOperationException:" La séquence ne contient aucun élément correspondant "". Je ne suis pas tout à fait sûr de savoir pourquoi cela se produit. Toute aide sera très appréciée. Merci!

Voici à quoi ressemble le code ....

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

Voici où je sèmerai des données aux entités ...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

Voici mon modèle d'entité ...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

Voici mon DatabaseContext ...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

J'ai aussi une autre classe FakeDbContext.Base qui remplace OnModelCreating.

Voici la trace de pile:

Trace de la pile

Réponse acceptée

La trace de la pile indique que l'exception est levée lorsque le fournisseur de données recherche un "type de magasin à partir du nom". Cela indique que vous utilisez un type de données non pris en charge par Effort. Ceci est confirmé par un problème dans le projet Effort .


Réponse populaire

J'espère que cela t'aides.

De nombreuses réponses indiquent que vous devez ajouter FirstorDefault() dans vos instructions EF, mais cette erreur se produit également dans les propriétés incorrectes à l'aide d'annotations de données.

Lorsque vous utilisez des annotations de données, faites attention aux propriétés que vous ajoutez.

Exemple ci-dessous, j'ai raté le TypeName = "string" , qui aurait dû être nvarchar car c'est le type de données dans la base de données.

Prenez également note de l' Order = n (commence par 0).

Cela s'est produit lors de la mise à jour du code source d'un ancien collègue.

[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }

puis j'ai corrigé mon code avec

[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }

:)




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