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à ...

public static void AddTestData(IFakeDbContext context)
    {
        //**************** IT CRASHES HERE *********************
        context.FakeEntity1.AddOrUpdate(new FakeEntity1 
        {
           Name1 = "TestingName1",
           LastName1 = "TestingLastName1"

        });

        context.SaveChanges();
    }

Ecco il mio modello di entità ...

[Table("rpt.FakeEntity1")]
public partial class FakeEntity1 : IFakeEntity1 
{
    [Key]
    [Column(Order = 0)]
    [StringLength(20)]
    public string Name1 { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(20)]
    public string LastName1 { get; set; }

}

Ecco il mio DatabaseContext ...

public partial class FakeDbContext: IFakeDbContext
{

    public FakeDbContext(DbConnection dbConnection) 
                          : base(dbConnection, true)
    {
        //Effort requires this.
    }

}

public interface IFakeDbContext :IDisposable
{

    DbSet<FakeEntity1> FakeEntity1 {get; set;}

}

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 = 15, TypeName = "nvarchar")]
public string Name { get; set; }

:)



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow