.NET 7 Web API用EF Core 7查询Login字段遇空值异常问题
.NET 7 Web API + EF Core 7:可空字段查询抛出SqlNullValueException问题解决
问题场景
使用.NET 7 Web API搭配EF Core 7.0.11,数据库中Login字段为可空的nvarchar(100)类型,执行以下查询代码时抛出异常:
List<Operator> op = await _dbContext.Operator.Where(w => w.Login == "somelogin").ToListAsync();
异常信息
An exception occurred while iterating over the results of a query for context type 'DataBase.DBContext.DbContext'. System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
对比情况
- 通过非空的
IdOperator字段查询可正常运行,例如:List<Operator> t = await _dbContext.Operator.Where(w => w.IdOperator == 1).ToListAsync(); - 另一个从.NET 6升级到.NET 7的项目,使用相同的
Login查询逻辑无异常。
问题根源与解决办法
原因
项目的*.csproj文件中启用了nullable(配置为<Nullable>enable</Nullable>),但EF Core对应的Operator实体类里,Login属性未添加可空标记?,导致EF Core在映射可空数据库字段到非可空.NET类型时,遇到Null值触发异常。
解决步骤
- 确认项目
*.csproj中的nullable配置为enable - 修改
Operator实体类,将Login属性声明为可空类型:// 原非可空写法 // public string Login { get; set; } // 修改为可空类型 public string? Login { get; set; } - 重新编译并运行项目,查询即可正常执行
内容的提问来源于stack exchange,提问作者blane
相关产品推荐
相关产品推荐

