EF + Mysql 8.1突然出现System.InvalidCastException:无法将类型为“System.DBNT”的对象强制转换为类型“System.UInt64”

6rqinv9w  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(263)

我突然从一个简单的EF查询中得到错误:

System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.UInt64'.
   at MySqlConnector.Core.Row.GetUInt64(Int32 ordinal) in /_/src/MySqlConnector/Core/Row.cs:line 282
   at MySqlConnector.MySqlDataReader.GetUInt64(Int32 ordinal) in /_/src/MySqlConnector/MySqlDataReader.cs:line 316
   at MySqlConnector.MySqlDataReader.GetFieldValue[T](Int32 ordinal) in /_/src/MySqlConnector/MySqlDataReader.cs:line 396
   at Microsoft.EntityFrameworkCore.Query.Internal.BufferedDataReader.

我对对象本身没有做任何更改,模式和以前一样同步,完全符合预期,唯一可能的字段是ulongulong?BIGINT UNSIGNED),并正确Map到对象。
然而,当我调用投影(.select = new SameObject { ... })时,转换错误不会出现。
两个问题:
1.在这种情况下,是否有一些低级的调试方法可以至少找到相关的列名?(我检查了异常类型,没有发现任何特定的内容)
1.为什么当我调用await ctx.MyTable.ToListAsync()时会出现错误,而当我使用上述await ctx.MyTable.Select(x => new MyTableObject { ...set properties manually... }).ToListAsync()投影时却不会?
版本号:

.net: 7.0.401
nuget Pomelo.EntityFrameworkCore.MySql: 7.0.0
nuget MySql.Data: 8.1.0
MySql 8.0.34
nuget EF: 7.0.11
0kjbasz6

0kjbasz61#

您的模型类必须与表完全相同,因此请检查可空类型。尝试添加Nullable类型(?)添加到您的模型类中。
如果你已经这样做了,在你的投影上,试着用Convert.IsDBNull()检查所有的属性。您可以在Select中使用此方法。它将帮助您定位空引用的属性。

相关问题