Я переписываю встроенный SQL в моем классе репозитория вместо использования хранимых процедур (требование безопасности). После использования Fluent NHibernate и Linq2Sql в прошлом я нахожу его чрезвычайно громоздким и неэлегантным.Каков самый элегантный способ использования хранимых процедур?
EDIT: Чтобы уточнить, я не ищу решение ORM, которое работает с хранимыми процедурами. Я просто хочу, чтобы некоторые советы о том, как написать код ниже.
Существуют ли какие-либо стратегии для того, чтобы сделать такой код максимально элегантным?
string commandText = "dbo.Save";
using (SqlConnection sql = new SqlConnection(_connString.ConnectionString))
using (SqlCommand cmd = sql.CreateCommand())
{
cmd.CommandText = commandText;
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter idParam = new SqlParameter("identity", item.Identity);
idParam.Direction = ParameterDirection.Input;
SqlParameter nameParam = new SqlParameter("name", item.Name);
nameParam.Direction = ParameterDirection.Input;
SqlParameter descParam = new SqlParameter("desc", item.Description);
descParam.Direction = ParameterDirection.Input;
SqlParameter titleParam = new SqlParameter("title", item.)
descParam.Direction = ParameterDirection.Input;
//SNIP More parameters
cmd.Parameters.Add(idParam);
cmd.Parameters.Add(descParam);
cmd.Parameters.Add(titleParam);
//SNIP etc
sql.Open();
cmd.ExecuteNonQuery();
//Get out parameters
}
return item;
Ох спасибо за головы! Я этого не видел. –
Ходят слухи, что EntLib будет обновлен для .NET 3.5 для поддержки LINQ. –
SqlHelper также будет кэшировать параметры в _some_ перегрузки, что позволит сэкономить поездки на db. В приведенном выше примере .NET будет проходить в оба конца до db, чтобы обнаружить тип данных для параметра @ Parameter1 и т. Д. Обязательно ознакомьтесь с его использованием. – Daniel