در اینترفیس IUnitOfWork این امضاء رو اضافه کن:
IEnumerable ExecuteReader(string storedProcedureName, SqlParameter[] parameters = null);
در کلاس UnitOfWork هم این متد رو پیاده سازی کن:
public IEnumerable ExecuteReader(string storedProcedureName, SqlParameter[] parameters = null)
{
if (parameters != null && parameters.Any())
{
var parameterBuilder = new StringBuilder();
parameterBuilder.Append(string.Format("EXEC {0} ", storedProcedureName));
for (int i = 0; i < parameters.Length; i++)
{
if (parameters[i].SqlDbType == SqlDbType.VarChar
|| parameters[i].SqlDbType == SqlDbType.NVarChar
|| parameters[i].SqlDbType == SqlDbType.Char
|| parameters[i].SqlDbType == SqlDbType.NChar
|| parameters[i].SqlDbType == SqlDbType.Text
|| parameters[i].SqlDbType == SqlDbType.NText)
{
parameterBuilder.Append(string.Format("{0}='{1}'", parameters[i].ParameterName,
string.IsNullOrEmpty(parameters[i].Value.ToString())
? string.Empty : parameters[i].Value.ToString()));
}
else if (parameters[i].SqlDbType == SqlDbType.BigInt
|| parameters[i].SqlDbType == SqlDbType.Int
|| parameters[i].SqlDbType == SqlDbType.TinyInt
|| parameters[i].SqlDbType == SqlDbType.Decimal
|| parameters[i].SqlDbType == SqlDbType.Float
|| parameters[i].SqlDbType == SqlDbType.Money
|| parameters[i].SqlDbType == SqlDbType.SmallInt
|| parameters[i].SqlDbType == SqlDbType.SmallMoney)
{
parameterBuilder.Append(string.Format("{0}={1}", parameters[i].ParameterName
, parameters[i].Value));
}
else if (parameters[i].SqlDbType == SqlDbType.Bit)
{
parameterBuilder.Append(string.Format("{0}={1}", parameters[i].ParameterName,
Convert.ToBoolean(parameters[i].Value)));
}
if (i < parameters.Length - 1)
{
parameterBuilder.Append(",");
}
}
var query = parameterBuilder.ToString();
var result = context.Database.SqlQuery(query);
return result.ToList();
}
else
{
var result = context.Database.SqlQuery(string.Format("EXEC {0}", storedProcedureName));
return result.ToList();
}
}
در آخر هر جایی خواستی ازش استفاده کن:
unitOfWork.ExecuteReader(commandText, parameters);
برای جزئیات بیشتر هم از این لینک استفاده کنید.