web-dev-qa-db-fra.com

La séquence ne contient aucun élément correspondant - EntityFramework

J'utilise EF 6.1.0 et créais un service WCF.

J'ai d'abord créé une bibliothèque de classes contenant mes entités, des mappeurs et un contexte pour initialiser EF . J'ai également créé une classe contenant une instanciation du contexte et j'ai le code suivant:

public IQueryable<[Entity]> GetAll()
{
    return context.[Entity].AsQueryable();
}

D'autre part, j'ai créé un service WCF sur le même projet et appelle la fonction GetAll () dans le fichier.svc comme suit:

public List<[Entity]> GetList()
{
    [iObject] repository = new [Object](new Context());
    return repository.GetAll().ToList();
}

Le projet est en construction. J'ai même vérifié la configuration et c'est dans la bonne base de données. Toutefois, la base de données et les tables supposées avoir été créées n'existent pas et une erreur "La séquence ne contient aucun élément correspondant" apparaît dans le retour.

Si celui-ci est déroutant, pouvez-vous me signaler un lien de services WCF utilisant Code First Entity Framework.

22
user1960948

J'ai eu un bogue qui m'a donné un System.InvalidOperationException avec le message Sequence contains no matching element parce qu'une chaîne incorrecte était transmise à .HasColumnType() dans la configuration de ma table.

60
Ceisc

Je viens de vivre le même problème. L'assistant Code d'abord de la base de données a généré l'une des colonnes sous la forme [Column(TypeName = "date")].

L'appel de .saveChanges() a donné le Sequence contains no elements.

Après avoir changé la colonne définie en [DataType(DataType.DateTime)], cela a fonctionné comme prévu.

10
Joep Grooten

J'obtenais également la même erreur en ajoutant la migration ou en mettant à jour la base de données.

La raison était que j'utilisais un type de colonne incorrect 

[Column("ImageType", TypeName = "varchar(20)")]
public string ImageType
{
     get;
     set;
}

Mais quand j'ai retiré 20 de varchar, cela a commencé à fonctionner pour moi. 

[Column("ImageType", TypeName = "varchar")]
public string ImageType
{
    get;
    set;
}
5
Rahul Sonone

Pour moi, ce message était dû à une incompréhension de l'attribut TypeName in Column.

Attribut de colonne: [Column (nom de chaîne, Propriétés: [Order = int], [TypeName = chaîne])

name: Nom d'une colonne dans une table de base de données. 
Ordre: Ordre d'une colonne, commençant par zéro index. (Optionnel) 
TypeName: Type de données d'une colonne. (Optionnel) 

Ce TypeName doit être uniquement le nom du type et ne doit inclure ni précision, ni échelle, ni longueur, ni aucun autre élément. Par exemple, ce qui suit provoquera une erreur

[Column (TypeName = "nvarchar (600)")]

alors que ci-dessous, cela fonctionnera bien, mais vous voudrez peut-être avoir une taille spécifique de la colonne.

[Column (TypeName = "nvarchar")]

2
user9762904

Entity Framework lève cette exception si le type de colonne n'est pas valide. Par exemple:

// This will throw an error. There is no such type name.
[Column(TypeName = "Invalid")]
public string Column1 { get; set; }

// Works.
[Column(TypeName = "varchar")]
public string Column1 { get; set; }

Voir ces exemples:

1
Hans Vonn

Ouaip. M'a également pris parce que, dans un moment de distraction, j’ai mis le littéral long dedans pour un bigint column C’est-à-dire. HasColumnType("long")- pouvez-vous le croire?! Quel clown!

Les générateurs créent généralement vos classes EF correctement, mais si vous ne pouvez pas ou ne voulez pas en utiliser une, vous pouvez utiliser une classe statique contenant des champs de chaîne statiques afin de pouvoir la comprendre parfaitement:

public static class DatabaseColumnTypes
{
    /// <summary>
    /// Use this for 'boolean' values.
    /// </summary>
    public static string BitColumn = "bit";

    /// <summary>
    /// Use this for 'byte' values.
    /// </summary>
    public static string TinyIntColumn = "tinyint";

    /// <summary>
    /// Use this for 'long' values.
    /// </summary>
    public static string BigIntColumn = "bigint";

    /// <summary>
    /// Use this for 'string' values.
    /// </summary>
    public static string VarcharColumn = "varchar";

    // etc
}

Maintenant, vous pouvez faire HasColumnType( DatabaseColumnTypes.BigIntColumn )

Je sais, je sais, c'est paresseux, je devrais me souvenir de ces types, mais de temps en temps, je me retrouve sur Stack Overflow et le fait gagner du temps…

1
CarllDev

J'ai eu cette erreur lors de la définition de l'héritage table-par-type avec l'API Fluent (en tant que classe dérivant de EntityTypeConfiguration<T>) et d'un champ redéfini par erreur déjà défini dans la configuration de la classe de base (et les deux étaient exactement identiques). J'utilisais le package de nuget EntityFramework 6.2.0.

0
Jan Bońkowski

J'ai reçu le même message d'erreur lorsque j'ai renommé mon modèle Member en Student et que j'avais une propriété de navigation dans une autre classe comme

public IList<Student> Members { get; set; }

J'ai changé cela en:

public IList<Student> Students { get; set; }

et le problème a été résolu!

0
Alireza Kahaei