Nello scorso articolo abbiamo visto come convertire un DataTable in una collezione di oggetti tipizzata:
Convertire un datatable in oggetti
Questa volta vediamo invece come convertire una collezione di oggetti in istruzioni di insert / update SQL.
Ribadiamo il concetto che esistono degli ORM quali NHibernate,Entity Framework che fanno già queste operazioni in modo eccellente, questo post vuole dare una soluzione semplice per quei progetti dove non è necessario (proprio per il fatto che non sono progetti complessi) oppure per progetti legacy di salvare degli oggetti tramite ADO.Net.
Diamo x scontato queste convenzioni:
- l'oggetto/tabella prevede in campo Id come chiave primaria
- le proprietà che vorremo mappare saranno di tipo Virtual, tutte le altre verranno ignorate
- il metodo eseguirà una insert (se id=0) o una update (se id!=0)
- il metodo accetta in input una IList che verrà valorizzato e vi servirà poi per eseguire il comando SQl
- il metodo ritorna la query sql che vi servirà poi per eseguire il comando di insert/update
Convertire un datatable in oggetti
Questa volta vediamo invece come convertire una collezione di oggetti in istruzioni di insert / update SQL.
Ribadiamo il concetto che esistono degli ORM quali NHibernate,Entity Framework che fanno già queste operazioni in modo eccellente, questo post vuole dare una soluzione semplice per quei progetti dove non è necessario (proprio per il fatto che non sono progetti complessi) oppure per progetti legacy di salvare degli oggetti tramite ADO.Net.
Diamo x scontato queste convenzioni:
- l'oggetto/tabella prevede in campo Id come chiave primaria
- le proprietà che vorremo mappare saranno di tipo Virtual, tutte le altre verranno ignorate
- il metodo eseguirà una insert (se id=0) o una update (se id!=0)
- il metodo accetta in input una IList
- il metodo ritorna la query sql che vi servirà poi per eseguire il comando di insert/update
using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Reflection; using MpsManager.Controllers.Helper; namespace MpsManager.Models { public static class MapDataAndBusinessEntityHelper { public static T SaveOrUpdateBusinessEntityToSqlDataQuesto invece è l'helper per poter effettuare operazioni Ado.net(T entity, string tableName,bool isUpdate) where T : new() { var hashtable = new Dictionary
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace MpsManager.Controllers.Helper { public class SQLADOHelper { public static string ConnectionString { get { return ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString; } } public static object ExecuteScalarQueryCommand(string sql) { return ExecuteScalarQueryCommand(sql, new List()); } public static void ExecuteNonQueryCommand(string sql) { using (IDbConnection connection = new SqlConnection(ConnectionString)) { connection.Open(); using (IDbCommand cmd = connection.CreateCommand()) { cmd.CommandText = sql; cmd.ExecuteNonQuery(); } } } public static DataTable ExecuteQueryCommand(string sql) { return ExecuteQueryCommand(sql, new List ()); } public static DataTable ExecuteQueryCommand(string sql, IList list) { var dt = new DataTable(); using (var connection = new SqlConnection(ConnectionString)) { var cmd = new SqlCommand(sql, connection); foreach (var sqlParameter in list) { cmd.Parameters.Add(sqlParameter); } connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); dt.Load(dr); connection.Close(); } return dt; } public static object ExecuteScalarQueryCommand(string sql, IList list) { using (IDbConnection connection = new SqlConnection(ConnectionString)) { connection.Open(); using (IDbCommand cmd = connection.CreateCommand()) { cmd.CommandText = sql; foreach (var sqlParameter in list) { cmd.Parameters.Add(sqlParameter); } try { object result = cmd.ExecuteScalar(); return result; } catch (Exception e) { throw new ApplicationException("ExecuteScalarQueryCommand", e); } } } } } }