Linq to SQL: ottenere la tabella corretta dato il tipo dell’oggetto
Come requisito, leggetevi prima l’articolo su MSDN pubblicato dal nostro amico Giancarlo “Janky” Sudano su Linq to SQL. Se avete voglia e se volete partire rapidamente con questo ORM, potete dare un’occhiata all’ottimo tutorial del mio omonimo Igor: l’avevo letto quando era stato messo on-line, ma l’ho ripreso ieri quando ho voluto ripercorrere i passaggi sul mio piccolo progetto che io chiamo “campo di battaglia” per studiare le nuove tecnologie ed i nuovi framework ai quali sono interessato.
Ieri sera ho mappato il mio domain-model su un database SQL Server 2005 Express Edition. Il domain-model contiene classi come Player, Team, Match, MatchResolver. In passato – chi di voi è attento se lo ricorderà – ho parlato di HockeyPlayer: qui si parla sempre di sport. Non chiedetemi perchè! 🙂
Arrivo al dunque.
La classe System.Data.Linq.DataContext espone un metodo GetTable che ritorna l’istanza di ITable relativa al tipo di oggetto passato in input al metodo stesso. Ecco un piccolo esempio:
1 public void SaveObject(T oggetto) 2 { 3 if (!init) initialize(); 4 5 ITable table = session.GetTable(oggetto.GetType()); 6 table.InsertOnSubmit(oggetto); 7 session.SubmitChanges(); 8 }
Il metodo SaveObject qui sopra fa parte di una classe del mio Data Access Layer. Prende in input un’istanza di un oggetto che vogliamo salvare su database attraverso Linq to SQL. Il tipo dell’oggetto è espresso tramite T, dal momento che il metodo fa parte di una classe generica, che impone che T derivi da BaseEntity, classe base di tutte le classi del mio domain-model.
Alla riga 5 otteniamo un riferimento alla tabella nella quale deve essere salvato l’oggetto: per farlo facciamo una chiamata a GetTable passandogli il tipo dell’oggetto. L’engine di Linq to SQL ottiene queste informazioni dal files di mappings. Alla riga 6 aggiungiamo l’oggetto con la chiamata ad InsertOnSubmit(), e alla riga 7 rendiamo effettivi i cambiamenti su database. Più facile di così!
Technorati Tags: .NET Framework Linq