Sforzo (C #) - 'Sequenza non contiene alcun elemento corrispondente' quando si semina dati a una delle mie entità

c# effort entity-framework unit-testing

Domanda

Sto provando a costruire alcuni test unitari per alcune chiamate al servizio web nel mio progetto. Sto usando Entity Framework 6.1.3 nel mio progetto per recuperare i dati al livello di servizio (con un approccio code-first). Ho fatto alcune ricerche su come deridere un oggetto DatabaseContext e ho scoperto che lo sforzo può farlo.

Ho seguito la documentazione durante l'implementazione di Effort nei miei test unitari, ma quando provo a seminare dati sulle mie entità ottengo un'eccezione "System.InvalidOperationException: 'Sequence contains no corresponding'". Non sono del tutto sicuro del motivo per cui ciò sta accadendo. Qualsiasi aiuto sarà molto apprezzato. Grazie!

Ecco come appare il codice ....

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

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

Qui è dove io semino dati alle entità ...

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

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

Ecco il mio modello di entità ...

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

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

Ecco il mio DatabaseContext ...

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

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

Ho anche un'altra classe FakeDbContext.Base che sovrascrive OnModelCreating.

Ecco la traccia dello stack:

StackTrace

Risposta accettata

La traccia dello stack mostra che l'eccezione viene generata quando il fornitore di dati sta cercando un "tipo di negozio dal nome". Ciò indica che stai utilizzando un tipo di dati che lo sforzo non supporta. Ciò è confermato da un problema nel progetto Sforzo .


Risposta popolare

spero che questo ti aiuti.

Molte risposte dicono che devi aggiungere FirstorDefault() nelle tue istruzioni EF, ma questo errore si verifica anche nelle proprietà errate usando le annotazioni dei dati.

Quando si utilizzano Annotazioni dati, fare attenzione con le proprietà che si aggiungono.

Esempio di seguito, ho perso il TypeName = "string" , che avrebbe dovuto essere nvarchar in quanto è il tipo di dati nel database.

Inoltre, prendi nota Order = n , (inizia con 0)

Si è verificato questo mentre si aggiornava un codice sorgente dei colleghi passati.

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

poi ho corretto il mio codice con

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

:)




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é