Effort (EF Unit Testing) donnant des erreurs


Question

J'essaie de faire des tests unitaires sur certaines classes qui répondent sur un contexte de base de données Entity Framework. Pour l’aide, j’ai réussi à trouver une bibliothèque appelée Effort, qui semble être un peu ancienne et pas très bien documentée, mais qui semble fonctionner et qui semble être très populaire.

J'essaie d'utiliser un chargeur de données CSV.

Lorsque je fais un ToArray() je reçois une exception disant que la Sequence contains no matching element .

Des idées sur ce que je pourrais faire mal? Ou si pas une bibliothèque différente je pourrais vouloir donner une chance?

Quelques extraits:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Contexte DB:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Le SEC_USER.csv:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Le test:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

System.InvalidOperationException:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Réponse populaire

Je viens d'avoir ce problème et j'ai découvert que le problème était que j'utilisais l'annotation de données ColumnType . Même lorsque j'ai changé pour utiliser la convention de HasColumnType de modèle de HasColumnType , j'ai toujours l'erreur exacte. Je suppose que l'une de vos entités possède cette annotation (ou convention) de données?

Si tel est le cas, la solution la plus simple consiste à supprimer l'annotation de données. Si ce n'est pas possible, j'ai créé une propriété virtuelle (par exemple, public virtual bool IsInMemoryContext { get; } = false; ) sur le DbContext que j'ai écrasé dans mes tests public override bool IsInMemoryContext { get; } = true; et dans la méthode OnModelCreating , j’ai vérifié si cette propriété était définie avant d’ajouter les types de colonne.

if (!IsInMemoryContext)
{
    modelBuilder.Entity<AuditLog>()
        .Property(e => e.EventType)
        .HasColumnType("char");
}

Plus d'informations sur l'erreur peuvent être trouvées ici: Problème GitHub avec Effort





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