System.InvalidCastException: «Коллекция SqlParameterCollection принимает только ненулевые объекты типа SqlParameter, а не объекты SqlParameter».

Я перенес свой проект с ASP.NET Core 2.2 на ASP.NET Core 3.0. Теперь я получаю это исключение. В ASP.NET Core 2.2 использовалось FromSql(); теперь он использует FromSqlRaw(). Я вызываю свою процедуру, используя Entity Framework Core.

SqlParameter Username = new SqlParameter
            {
                ParameterName = "USERNAME",
                SqlDbType = SqlDbType.NVarChar,
                Value = user.Username,
                Direction = ParameterDirection.Input,
                Size = 50
            };

SqlParameter Password = new SqlParameter
            {
                ParameterName = "PASSWORD",
                SqlDbType = SqlDbType.NVarChar,
                Value = user.Password,
                Direction = ParameterDirection.Input,
                Size = 50
            };

SqlParameter msgOut = new SqlParameter
            {
                ParameterName = "MSG",
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Output,
                Size = 1000
            };

SqlParameter statusOut = new SqlParameter
            {
                ParameterName = "STATUS",
                SqlDbType = SqlDbType.Int,
                Direction = ParameterDirection.Output
            };

var sql = @"EXEC PRC_USERS_LOGIN
                        @USERNAME, 
                        @PASSWORD, 
                        @MSG OUT, 
                        @STATUS OUT";

Users resultUser = new Users();
resultUser = ctx.Users.FromSqlRaw(sql, Username, Password, msgOut, statusOut)
                      .FirstOrDefault();

person Muhammad Aftab    schedule 29.09.2019    source источник


Ответы (2)


Исправлено путем изменения использования System.Data.SqlClient на использование Microsoft.Data.SqlClient.

https://github.com/aspnet/EntityFrameworkCore/issues/16812#issuecomment-516013245

person LRFalk01    schedule 01.10.2019
comment
Да, это тоже было проблемой. Спасибо, - person Muhammad Aftab; 03.10.2019
comment
Тем временем я получаю сообщение об ошибке, когда использую пространство имен «Microfoft.Data.SqlClient». но «Sytem.Data.SqlClient» может передавать нулевой столбец без каких-либо сообщений об ошибках. Это мой код (stackoverflow.com/questions/59499253/) - person Daleman; 27.12.2019

Этот код работал после замены

System.Data.SqlClient.SqlParameter

to

Microsoft.Data.SqlClient.SqlParameter

а также

FirstOrDefault();

to

ToList();
person Muhammad Aftab    schedule 03.10.2019
comment
Первая часть вашего ответа здесь на самом деле решает вашу проблему, а не от FirstOrDefault(); до ToList();. - person ChronoZZ; 25.02.2020