My application runs on .NET framework 4.7 and I'm using Entity Framework 6.1.3. Currently, my code uses some classes from the namespace System.Data.SqlClient
such as SqlParameter
. I want to switch to Microsoft.Data.SqlClient
.
However, I'm not sure if EF6 is compatible with Microsoft.Data.SqlClient
. This is an old article from Microsoft, it says that EF Core, EF 6 etc. haven’t yet made the transition to the new provider Microsoft.Data.SqlClient
. So, I'm a bit confused.
Everything has been working well with System.Data.SqlClient
for the below code
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);
}
However, when I am switching to Microsoft.Data.SqlClient
, I'm getting this error:
System.InvalidCastException: The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.
at System.Data.SqlClient.SqlParameterCollection.ValidateType(Object value)
at System.Data.SqlClient.SqlParameterCollection.AddRange(Array values)
at System.Data.Entity.Core.Objects.ObjectContext.CreateStoreCommand(String commandText, Object[] parameters)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternalAsync.d__6f`1.MoveNext()
Microsoft.Data.SqlClient
with Entity Framework (unless you take care to keep classes strictly separated, I suppose). Recent versions of EF Core have switched toMicrosoft.Data.SqlClient
, though. – Aishaaisle