ExecuteSqlRawAsyn c возвращает -1 в Entity Framework 3.1 - PullRequest
0 голосов
/ 21 января 2020

В моем ASP. NET Core 3.1 веб-приложении я в основном использую хранимые процедуры. При использовании ExecuteSqlRawAsync в Entity Framework Core всегда возвращается -1. Ниже приведен мой обобщенный метод для выполнения хранимых процедур.

  public async Task<int> ExecuteSqlNonQuery(string StoredProcName, params object[] parameters)
  {
        int iTotalRecordsAffected = 0;

        List<TEntity> listOfObject = null;

        try
        {
            if (!string.IsNullOrEmpty(StoredProcName))
            {
                StringBuilder sbStoredProc = new StringBuilder();
                sbStoredProc.Append("Exec ");
                sbStoredProc.Append(StoredProcName);

                if (parameters != null)
                {
                    foreach (SqlParameter item in parameters)
                    {
                        if (listOfObject == null)
                        {
                            sbStoredProc.Append(" @");
                            listOfObject = new List<TEntity>();
                        }
                        else
                        {
                            sbStoredProc.Append(", @");
                        }
                        sbStoredProc.Append(item.ParameterName.Replace("@", ""));
                        if (item.Direction == System.Data.ParameterDirection.Output)
                        {
                            sbStoredProc.Append(" OUT");
                        }
                    }
                }

                iTotalRecordsAffected = await _DBContext.Database.ExecuteSqlRawAsync(sbStoredProc.ToString(), parameters);
            }
        }
        catch (Exception ex)
        {

        }
        finally
        {
            if (_DBContext.Database.GetDbConnection().State == System.Data.ConnectionState.Open)
            {
                _DBContext.Database.GetDbConnection().Close();
            }
        }

        return iTotalRecordsAffected;
 }

Вот мой метод контроллера, который вызывает SP для обновления данных.

   public async Task<int> UpdateCustomerData(EditCustomerDetail editCustomerDetail)
    {
        int iTotalRecordsEffected = 0;

        try
        {
            List<SqlParameter> sqlParamList = new List<SqlParameter>()
            {
                new SqlParameter("@CustomerID",editCustomerDetail.CorporateID),
                new SqlParameter("@CustomerName",editCustomerDetail.CorporateName),
                new SqlParameter("@CustomerAddress",editCustomerDetail.Address),
                new SqlParameter("@City",editCustomerDetail.City),
                new SqlParameter("@CountryID",editCustomerDetail.CountryID),
                new SqlParameter("@StateID",editCustomerDetail.StateID),
                new SqlParameter("@Description",editCustomerDetail.Description),
                new SqlParameter("@Phone",editCustomerDetail.Phone),
                new SqlParameter("@Fax",editCustomerDetail.Fax),
                new SqlParameter("@ModifiedBy",editCustomerDetail.UserID)
            };

            iTotalRecordsEffected = await _unitOfWork.GetRepository<EditCustomerDetail>().ExecuteSqlNonQuery("UpdateCustomerDetails", sqlParamList.ToArray());
        }
        catch (Exception ex)
        {

        }
        finally
        {

        }
        return iTotalRecordsEffected;
    }

Любое предложение, что я делаю неправильно?

...