Sto riscrivendo l'SQL inline nella mia classe di repository per utilizzare invece stored procedure (requisiti di sicurezza). Dopo aver usato Fluent NHibernate e Linq2Sql in passato, trovo che sia estremamente ingombrante e poco elegante.Qual è il modo più elegante di utilizzare le stored procedure?
EDIT: Per chiarire, non sto cercando una soluzione ORM che funzioni con i proc memorizzati. Voglio solo qualche consiglio su un bel modo di scrivere il codice qui sotto.
Esistono strategie per rendere questo tipo di codice il più elegante possibile?
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 grazie per le teste lassù! Non l'avevo visto. –
Si dice che EntLib sarà aggiornato per .NET 3.5 per supportare LINQ. –
SqlHelper memorizza anche i parametri in _some_ dei sovraccarichi, il che salverà i viaggi nel db. In quanto sopra, .NET eseguirà il round trip del db per scoprire il tipo di dati per @ Parameter1, ecc. Assicurati di leggere sul suo utilizzo. – Daniel