当前位置:   article > 正文

EF Core Error:Unable to cast object of type ‘System.DBNull‘ to type ‘System.String‘_unable to cast object of type 'system.dbnull' to t

unable to cast object of type 'system.dbnull' to type 'system.string'.

[ExceptionMessage]:Unable to cast object of type ‘System.DBNull’ to type ‘System.String’.\r\n\t[ExceptionStackTrace]: at MySqlConnector.Core.Row.GetString(Int32 ordinal) in /_/src/MySqlConnector/Core/Row.cs:line 371\r\n

1. EF Core错误排查

EF Core框架是微软的.NET框架的最重要的ORM(对象关系映射)框架,其支持丰富的数据库类型,从微软的Sql Server 到Oracle的MySql,其都有丰富的支持,而今天,一不小心又掉到坑里了,大家赶快来观赏下。

Unable to cast object of type 'System.DBNull' to type 'System.String'

该错误,一般是由于 在EF映射时,执行了 IsRequired()导致,删除 .IsRequired()即可.

然而,本次的坑并非 .IsRequired()引起,我的EF映射如下:

 entity.Property(e => e.Age)
.HasColumnType("int(11)")
   .HasComment("年龄");

entity.Property(e => e.Avatar)
   .HasColumnType("varchar(255)")
   .HasComment("头像")   ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

查询数据库数据如下:
在这里插入图片描述
是的, 在Avatar 里有2条数据的 值为 NULL, 在我手工修改为 非NULL后,查询语句得以修复。

遍查度娘而不得,爬到google,也未能找到有效的解决方案,我已经处在崩溃的边缘,就差一根导火索了。

2.神奇的?

打开实体类的定义,我两眼已经发直,这 tnd没道理啊!

正在我走投无路之际, 忽然就给string加了个 ?,这是出于啥目的, 已不可考。
把下面的代码修改了下

/// <summary>
  /// 头像
  /// </summary>
  public string Avatar { get; set; }
  • 1
  • 2
  • 3
  • 4

变成了

/// <summary>
  /// 头像
  /// </summary>
  public string? Avatar { get; set; }
  • 1
  • 2
  • 3
  • 4

再次访问,我XXX,好了。 什么鬼啊?难道是我启用了 C#的新特性 空引用类型?

打开Model的项目文件, 赫然出现了Nullable的定义

<PropertyGroup>
  <TargetFramework>net5.0</TargetFramework>
     <Nullable>annotations</Nullable>
 </PropertyGroup>
  • 1
  • 2
  • 3
  • 4

原来这里启用了空引用类型, 老天哎, 我关关关~~~~

<PropertyGroup>
  <TargetFramework>net5.0</TargetFramework>
    <Nullable>disable</Nullable>
</PropertyGroup>
  • 1
  • 2
  • 3
  • 4

3. 小结

c# 引用的 可空引用类型是个好东西!

一旦启用了可空引用类型这个新特征,引用类型将默认被视为不可空,无法赋予null,除非手工将它设为可空引用类型, 这样我们在项目的类库中就可以安全定义输入输出参数了。

然而,在EF Model库内,如果有此定义,那么实体类型需要严格定义是否为空,一不小心,就酿成今天之坑~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/380640
推荐阅读
相关标签
  

闽ICP备14008679号