Le entity class che vengono generate dal designer di Linq to SQL sono definite come partial class. Questo consente di poter scrivere delle classi che completano quelle generate con della logica che non verrà toccata da successive rigenerazioni. Più o meno tutte le classi generate dai tool del framework .NET a partire dalla versione 2.0 sono partial class. xsd.exe, wsdl.exe, etc... e ora naturalmente anche sqlmetal.exe hanno questa utile caratteristica.

Stamane, mentre lavoravo ad uno degli esempi per il prossimo Code Night Launch 2008, ho scoperto una cosa interessante. Se provate ad aggiungere un costruttore ad una delle entity class, nel momento in cui ne fate uso vi troverete con una Null Reference Exception la prima volta che tale entity arriva al DataContext. Spulciando il codice generato si vede chiaramente che il costruttore di default contiene del codice di inizializzazione perciò è obbligatorio chiamarlo nel proprio costruttore:

   1: public partial class Customer
   2: {
   3:     public Customer()
   4:         : this()
   5:     {
   6:         // ... inizializzare qui ...
   7:     }
   8: }

Questo modo non è consueto perchè di solito si fa il contrario assegnando via via i parametri dai costruttori senza parametri in giù. Tuttavia in questo caso è efficate.

Technorati Tag: ,

Aggiungi Commento