DotNetCore系列:解决"The SqlParameterCollection only accepts non-null SqlParameter type objects"问题

本文记录了一次.NETCore项目升级至3.1版本后,使用EFCore调用存储过程出现错误的问题及解决过程。由于依赖包由System.Data.SqlClient变更为Microsoft.Data.SqlClient,导致存储过程调用失败。通过更新依赖包,问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近段时间对公司的.NET Core项目升级为3.1,因为我们项目中使用的ORM框架是EF Core,所以顺带就把EF Core升级为3.1。
升级后对项目做了基本的调试和运行,发现在执行存储过程的时候,居然神奇的报错了。因为我并没有改动任何代码,所以非常疑惑为什么升级之后,原来好端端的代码会出错了!!!

System.InvalidCastException: The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.
   at Microsoft.Data.SqlClient.SqlParameterCollection.ValidateType(Object value)
   at Microsoft.Data.SqlClient.SqlParameterCollection.Add(Object value)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RawRelationalParameter.AddDbParameter(DbCommand command, Object value)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.ExecuteSqlRawAsync(DatabaseFacade databaseFacade, String sql, IEnumerable`1 parameters, CancellationToken cancellationToken)

经过仔细查阅微软关于EF Core升级的文档,发现是因为EF Core3.0之后,有一个依赖包变更了,由原来的

using System.Data.SqlClient

变更为

using Microsoft.Data.SqlClient

通过更改新的引用依赖包后,执行存储过程时就恢复正常了。
详细的一些发布说明大家可以查看微软的官方文档:

EF Core 3.0 中包含的中断性变更

大家有问题或者想和我交流的么也可以关注我的微信公众号:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugo_Hoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值