Ich habe ein Problem, wo FirstOrDefaultAsync
eine InvalidCastException
wirft beim Versuch, eine Zeile aus meiner Datenbank zu bekommen. Wenn ich ohne async auf FirstOrDefault
umschalte, lädt es die Daten in Ordnung..NET EntityFramework FirstOrDefaultAync Wurf werfen Fehler
Works
public async Task<Application> GetApplication(int id)
{
return _context.Applications.FirstOrDefault(a => a.Id == id);
}
nicht
public async Task<Application> GetApplication(int id)
{
return await _context.Applications.FirstOrDefaultAsync(a => a.Id == id);
}
Das Schema für die application
Tabelle funktionierts sieht so aus:
CREATE TABLE `application` (
`id` INTEGER NOT NULL,
`name` TEXT NOT NULL UNIQUE,
`application_id` TEXT NOT NULL UNIQUE,
`secret_key` TEXT NOT NULL UNIQUE,
PRIMARY KEY(id)
);
Die Daten in der Datenbank :
+----+---------+----------------+------------+
| id | name | application_id | secret_key |
+----+---------+----------------+------------+
| 1 | TestApp | app123 | secret123 |
+----+---------+----------------+------------+
Die ersten Zeilen des Stack-Trace sind wie folgt:
at System.Data.Common.DbDataReader.GetFieldValue[T](Int32 ordinal)
at System.Data.Common.DbDataReader.GetFieldValueAsync[T](Int32 ordinal, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Als id
das einzige Int32 Feld in der Tabelle ist, ich bin EF erraten ist mit dieser Eigenschaft zu kämpfen, aber ich kann nicht herausfinden, warum es funktioniert, wenn FirstOrDefault
verwendet wird. Irgendwelche Ideen?
Ich benutze Entity Framework 6 mit .NET 4.5.1.
Vielen Dank im Voraus!
verwenden 'FindAsync (id)'. Diese Erweiterungsmethode ist im Grunde entworfen, um mit Primärschlüssel zu arbeiten. –