nuget包Microsoft.Data.SqlClient是否可与实体框架一起使用?

问题描述

我的应用程序在.NET Framework 4.7上运行,并且我正在使用Entity Framework 6.1.3。当前,我的代码使用命名空间System.Data.SqlClient中的某些类,例如SqlParameter。我想切换到Microsoft.Data.SqlClient

但是,我不确定EF6是否与Microsoft.Data.SqlClient兼容。这是Microsoft的旧article,它表示EF Core,EF 6等尚未过渡到新的提供商Microsoft.Data.SqlClient。所以,我有点困惑。

对于以下代码,System.Data.SqlClient的一切工作都很好

public async Task<ICollection<int>> GetChildCustomerIdsAsync(int customerId)
{
   var sqlParameters = new List<SqlParameter>()
   {
      new SqlParameter("@CustomerId",customerId)
   };

   return await DbContext.Database.SqlQuery<int>("dbo.sp_GetChildCustomerIds @CustomerId=@CustomerId",sqlParameters.ToArray()).ToListAsync().ConfigureAwait(false);
}

但是,当我切换到Microsoft.Data.SqlClient时,出现此错误:

System.InvalidCastException:SqlParameterCollection仅接受非null的SqlParameter类型对象,而不接受SqlParameter对象。
在System.Data.SqlClient.SqlParameterCollection.ValidateType(对象值)
在System.Data.SqlClient.SqlParameterCollection.AddRange(数组值)
在System.Data.Entity.Core.Objects.ObjectContext.CreateStoreCommand(字符串commandText,Object []参数)处
在System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternalAsync.d__6f`1.MoveNext()

解决方法

否,EF 6不能与Microsoft.Data.SqlClient一起使用,可能发生变化的问题之一是EF6仍支持.NET Framework 4.0

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...