4

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

但是,我不确定 EF6 是否与Microsoft.Data.SqlClient. 这是 Microsoft 的一篇旧文章,它说 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 只接受非空 SqlParameter 类型对象,不接受 SqlParameter 对象。
在 System.Data.SqlClient.SqlParameterCollection.ValidateType(Object value)
在 System.Data.SqlClient.SqlParameterCollection.AddRange(Array values)
在 System.Data.Entity.Core.Objects.ObjectContext.CreateStoreCommand(String commandText, Object[] 参数)
在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternalAsync.d__6f`1.MoveNext()

4

1 回答 1

2

不,EF 6 不适用于 Microsoft.Data.SqlClient,潜在更改的问题之一是 EF6 仍然支持 .NET Framework 4.0

于 2020-09-10T15:37:25.483 回答