В моем 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;
}
Любое предложение, что я делаю неправильно?