gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:09:38 31 4
gpt4 key购买 nike

我在使用 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com