web-dev-qa-db-de.com

Sequenz enthält kein übereinstimmendes Element - EntityFramework

Ich verwende EF 6.1.0 und habe einen WCF-Dienst erstellt.

Zuerst habe ich eine Klassenbibliothek erstellt, die meine Entitäten, Mappers und Context zum Initialisieren von EF ..__ enthält. Ich habe auch eine Klasse erstellt, die eine Instantiierung des Kontextes enthält, und habe folgenden Code:

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

Andererseits habe ich einen WCF-Dienst für dasselbe Projekt erstellt und ruft die Funktion GetAll () in der.svc-Datei folgendermaßen auf:

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

Das Projekt baut auf. Ich überprüfe sogar die Konfiguration und sie befindet sich in der richtigen DB. Die angeblich erstellten Datenbanken und Tabellen sind jedoch nicht vorhanden, und in der Rückgabe wird ein Fehler "Sequenz enthält kein übereinstimmendes Element" angezeigt.

Wenn dies verwirrend ist, können Sie mir einen Link von WCF Services mit Code First Entity Framework zeigen.

22
user1960948

Ich hatte einen Fehler, bei dem ich einen System.InvalidOperationException mit der Nachricht Sequence contains no matching element bekam, da in meiner Tabellenkonfiguration ein falscher Zeichenfolgenwert an .HasColumnType() übergeben wurde.

60
Ceisc

Ich habe gerade das gleiche Problem erfahren. Der Code First von Datenbank-Assistent hat eine der Spalten als [Column(TypeName = "date")] generiert.

Aufruf von .saveChanges() führte zum Sequence contains no elements.

Nachdem die definierte Spalte in [DataType(DataType.DateTime)] geändert wurde, funktionierte sie wie erwartet.

10
Joep Grooten

Beim Hinzufügen der Migration oder beim Aktualisieren der Datenbank wurde dieselbe Fehlermeldung angezeigt.

Der Grund war, dass ich einen falschen Säulentyp verwendet habe 

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

Aber als ich 20 von Varchar entfernte, fing es an, für mich zu arbeiten 

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

Für mich war diese Nachricht ein Missverständnis für das Attribut TypeName in Column.

Spaltenattribut: [Spalte (Name der Zeichenfolge, Eigenschaften: [Reihenfolge = int], [Typname = Zeichenfolge])

name: Name einer Spalte in einer Db-Tabelle. 
Reihenfolge: Reihenfolge einer Spalte, beginnend mit dem Nullindex. (Wahlweise) 
TypeName: Datentyp einer Spalte. (Wahlweise) 

Dieser TypeName darf nur der Name des Typs sein und darf weder Genauigkeit noch Skalierung oder Länge und andere Dinge enthalten. Das folgende Beispiel führt beispielsweise zu einem Fehler

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

während unten eine einwandfrei funktioniert, möchten Sie möglicherweise eine bestimmte Größe der Spalte haben. Eine Möglichkeit ist die Verwendung einer fließenden API

[Spalte (TypeName = "nvarchar")]

2
user9762904

Entity Framework löst diese Ausnahme aus, wenn der Spaltentyp ungültig ist. Zum Beispiel:

// 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; }

Siehe diese Beispiele:

1
Hans Vonn

Jep. Ich habe mich auch erwischt, weil ich in einem Moment der Ablenkung die wörtliche long für eine bigint -Spalte dort einfügte. HasColumnType("long")- kannst du es glauben ?! Was für ein Clown!

Generatoren erstellen Ihre EF-Klassen im Allgemeinen ordnungsgemäß. Wenn Sie jedoch keine Klasse verwenden können oder wollen, können Sie eine statische Klasse mit statischen String-Feldern verwenden, um sie recht gut zu verstehen:

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
}

Jetzt können Sie HasColumnType( DatabaseColumnTypes.BigIntColumn ) machen

Ich weiß, ich weiß, das ist faul, ich sollte mich an diese Typen erinnern, aber gelegentlich finde ich mich auf Stack Overflow und schaue es nach und das spart einfach Zeit…

1
CarllDev

Ich habe diesen Fehler beim Definieren von Table-Per-Type-Vererbung mit Fluent-API (als von EntityTypeConfiguration<T> abgeleitete Klasse) erhalten und ein irrtümlich neu definiertes Feld, das bereits in der Basisklassenkonfiguration definiert wurde (und beide waren exakt gleich). Ich habe das EntityFramework 6.2.0-Nuget-Paket verwendet.

0
Jan Bońkowski

Ich habe dieselbe Fehlermeldung erhalten, als ich mein Member-Modell in Student umbenannt hatte und eine Navigationseigenschaft in einer anderen Klasse hatte:

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

Ich habe das geändert in:

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

und das Problem wurde gelöst!

0
Alireza Kahaei