.NET Entity Framework FirstOrDefaultAsync 抛出强制转换错误

标签 .net entity-framework sqlite asynchronous

我在使用 FirstOrDefaultAsync 时遇到问题抛出 InvalidCastException当尝试从我的数据库中获取一行时。如果我切换到FirstOrDefault如果没有异步,那么它可以很好地加载数据。

作品

public async Task<Application> GetApplication(int id)
{
    return _context.Applications.FirstOrDefault(a => a.Id == id);
}

不起作用

public async Task<Application> GetApplication(int id)
{
    return await _context.Applications.FirstOrDefaultAsync(a => a.Id == id);
}

application 的架构表格看起来像这样:

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)
);

数据库中的数据为:

+----+---------+----------------+------------+
| id |  name   | application_id | secret_key |
+----+---------+----------------+------------+
|  1 | TestApp | app123         | secret123  |
+----+---------+----------------+------------+

堆栈跟踪的前几行如下:

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)

id是表中唯一的 Int32 字段,我猜 EF 正在努力处理这个属性,但是我无法弄清楚为什么它在使用 FirstOrDefault 时起作用。有什么想法吗?

我将 Entity Framework 6 与 .NET 4.5.1 结合使用。

提前致谢!

最佳答案

您能否更新您的问题,因为您所说的有效,实际上不应该 - FirstOrDefault() 不会返回 Task,因此您会在那里得到强制转换异常。

你需要的是

public async Task<Application> GetApplicationAsync(int id)
{
    return await _context.Applications.FirstOrDefaultAsync(a => a.Id == id);
}

关于.NET Entity Framework FirstOrDefaultAsync 抛出强制转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41932435/

相关文章:

.net - 类是盒装的吗? 。网

c# - 如何收集文件夹及其子文件夹中与字符串匹配的所有文件

asp.net-mvc - 将 updatemodel 与 EF4.3.1 一起使用时出现 InvalidOperationException

android.database.CursorIndexOutOfBoundsException : Index -1 requested, 大小为 1

c# - ListViewItem 选中与选中

c# - 在 docker 容器中包含 Entity Framework 工具

c# - 此版本的 SQL Server 不支持已弃用的功能 'INSERT NULL into TIMESTAMP columns'

android - 如何从 SQLite 中获取记录的总数

android.util.Log.println_native 中的 java.lang.NullPointerException

C# SQLite 连接器问题