Estoy volviendo a escribir el SQL en línea en mi clase de repositorio para usar en su lugar procedimientos almacenados (requisito de seguridad). Después de usar Fluent NHibernate y Linq2Sql en el pasado, me resulta extremadamente difícil de manejar y poco elegante.¿Cuál es la forma más elegante de usar procedimientos almacenados?
EDIT: Para aclarar, no estoy buscando una solución ORM que funcione con procs almacenados. Solo quiero algunos consejos sobre una buena forma de escribir el código a continuación.
¿Existen estrategias para hacer que este tipo de código sea lo más elegante posible?
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;
¡Ooh, gracias por la cabeza allá arriba! No había visto esto. –
Se rumorea que EntLib se actualizará para .NET 3.5 para ser compatible con LINQ. –
SqlHelper también almacenará en caché los parámetros en algunas de las sobrecargas, lo que guardará los viajes a la base de datos. En lo anterior, .NET realizará un viaje de ida y vuelta a la base de datos para descubrir el tipo de datos para @Parámetro1, etc. Asegúrese de leer sobre su uso. – Daniel