.netcore 3.1 EFCore报错-The

Posted wx6070687864c6e

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.netcore 3.1 EFCore报错-The相关的知识,希望对你有一定的参考价值。

把.netcore 2.2升级到3.1后,EFcore里,执行自己写的sql一直报错。部分代码如下:

//using System.Data.SqlClient;
List<SmallOrderResp> result = new List<SmallOrderResp>();
string sql = @"select * from cs_orders";
SqlParameter[] parameters =
new SqlParameter("@app_user_id",app_user_id)
;
result= this.QueryBySql<SmallOrderResp>(sql, parameters).ToList();

  

/// <summary>
/// 执行SQL查询-返回List
/// </summary>
public virtual IEnumerable<Entity> QueryBySql<Entity>(string sql, object[] parameters = null)

DbConnection connection = _dbContext.Database.GetDbConnection();
DbCommand cmd = connection.CreateCommand();
connection.Open();
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
if (parameters != null)

cmd.Parameters.AddRange(parameters);

DataTable dt = new DataTable();
using (DbDataReader reader = cmd.ExecuteReader())

dt.Load(reader);
cmd.Parameters.Clear();

connection.Close();
return ConvertHelper.DataTableToIList<Entity>(dt).ToList();

  

简单的错误信息如下:

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.AddRange(Array values)
at MuXue.Zyiz.Template.Infrastructure.Repository.BaseRepository`1.QueryBySql[Entity](String sql, Object[] parameters) in D:\\VSWrok\\MuXue.Zyiz.Template.WebApi\\MuXue.Zyiz.Template.Infrastructure\\Repository\\BaseRepository.cs:line 609
at MuXue.Zyiz.Template.Infrastructure.Repository.ordersRepository.<QueryListSmallModel>d__1.MoveNext() in D:\\VSWrok\\MuXue.Zyiz.Template.WebApi\\MuXue.Zyiz.Template.Infrastructure\\Repository\\ordersRepository.cs:line 38
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at MuXue.Zyiz.Template.Service.Impl.ordersService.<GetList>d__9.MoveNext() in D:\\VSWrok\\MuXue.Zyiz.Template.WebApi\\MuXue.Zyiz.Template.Service\\Impl\\ordersService.cs:line 63

  找了很长时间一直未找到解决方案,最终在github上找到问题所在:

​https://github.com/dotnet/efcore/issues/16812​

原来是 

using System.Data.SqlClient;

  这个的错误,.netcore 3.1以后,就不能用这个了。需要用另一个,如下。

Microsoft.Data.SqlClient

  

 

作者:沐雪 文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者,如需转载恳请注明。 如果您觉得阅读这篇博客让你有所收获
​​​ 为之网-热爱软件编程 http://www.weizhi.cc/​



以上是关于.netcore 3.1 EFCore报错-The的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core教程

从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表

由于产生时间成本,禁用 EF Core 3.1 的模型验证

.Net Core 3.1 登录用户帮助

为啥我的 ASP.NET Core 3.1 控制器会自动为从视图返回的 EF Core 模型分配 ID?

NETCore项目报错 An error occurred while starting the application