Il seguente frammento di codice in C# illustra una tecnica, utilizzando ADO.NET, per mappare i dati presenti nelle proprietà di un oggetto nelle colonne di un DataTable.
In particolare, viene creato un oggetto di tipo DataRow nel quale vengono copiati i valori delle proprietà dell'oggetto che hanno un nome corrispondente a quello delle colonne presenti nel DataTable.
La classe di esempio
Di seguito viene riportata la classe che utilizzeremo nell'esempio:
C#
class Anagrafica
{
public string Nome { get; set; } = string.Empty;
public string Cognome { get; set; } = string.Empty;
public DateTime
DataNascita { get; set; }
}
Il DataTable
Per l'esempio utilizziamo un oggetto di tipo DataTable:
C#
private DataTable
dttDati = new DataTable();
La funzione per il mapping
La seguente funzione si occupa di copiare nel DataRow i valori presenti nelle proprietà dell'oggetto.
Per ottenere le proprietà dell'oggetto viene utilizzata la Reflection tramite il metodo GetProperties().
Per ogni proprietà viene verificato se nel DataTable esiste una colonna con lo stesso nome. In caso affermativo, il valore della proprietà viene assegnato alla relativa colonna del DataRow.
C#
private void MappaDtoObjectInDataRow(object dto, DataRow r)
{
foreach (var prop in dto.GetType().GetProperties())
{
if
(dttDati.Columns.Contains(prop.Name))
{
r[prop.Name] = prop.GetValue(dto) ?? DBNull.Value;
}
}
}
In questo modo, ad esempio, la proprietà Nome dell'oggetto viene associata alla colonna Nome del DataTable, la proprietà Cognome alla colonna Cognome e così via.
Esempio di utilizzo
Di seguito viene mostrato un esempio di utilizzo della funzione, ad esempio all'interno dell'evento Load di una Form oppure nell'evento Click di un pulsante.
Per prima cosa vengono definite le colonne del DataTable:
C#
dttDati.Columns.Add(new DataColumn("Nome"));
dttDati.Columns.Add(new DataColumn("Cognome"));
dttDati.Columns.Add(new DataColumn("DataNascita"));
Successivamente viene creato un oggetto Anagrafica:
C#
Anagrafica nominativo =
new Anagrafica
{
Nome = "Emanuele",
Cognome = "Mattei",
DataNascita
= DateTime.Now
};
A questo punto viene creato un nuovo DataRow utilizzando il metodo NewRow() del DataTable:
C#
DataRow riga = dttDati.NewRow();
Il metodo MappaDtoObjectInDataRow() viene quindi utilizzato per copiare nel DataRow i valori presenti nelle proprietà dell'oggetto:
C#
MappaDtoObjectInDataRow(nominativo, riga);
Infine, il DataRow viene aggiunto al DataTable:
C#
dttDati.Rows.Add(riga);
Il risultato è quindi un DataTable nel quale i valori dell'oggetto Anagrafica sono stati associati alle colonne aventi lo stesso nome delle relative proprietà.