近段时间对公司的.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
通过更改新的引用依赖包后,执行存储过程时就恢复正常了。
详细的一些发布说明大家可以查看微软的官方文档:
大家有问题或者想和我交流的么也可以关注我的微信公众号: