Owned Types in Entity Framework Core

Entity Framework Core consente di definire una particolare tipologia di proprietà chiamate Owned Types. Già presenti all’interno di Entity Framework sotto il nome di Complex Types, sono stati reintrodotti all’interno di Entity Framework Core a partire dalla versione 2.0. Questa funzionalità non era stata riportata in Entity Framework Core 1.0.

L’obiettivo di questa tipologia di dati è quella di evitare il dover ripetere la definizione delle proprietà comuni nella definizione delle entity.

Supponendo di aver definito un’entity Person nel modo seguente: 

è possibile raggruppare alcuni campi mediante una classe, referenziata come proprietà:

Praticamente, è stata creata una nuova proprietà Name, composto da tre proprietà riutilizzabili nella definizione di altre entity.

A questo punto è necessario procedere con la mappatura all’interno dell’entity Person per poter utilizzare l’owned type Name.  La mappatura viene effettuata all’interno del metodo OnModelCreating del context: 

E’ da notare la presenza del metodo OwnsOne(…) che sta a specificare la mappatura con l’owned type, seguito dai soliti metodi utilizzati per le entity Property e HasColumnName: 

  • PropertyName:  specifica il nome della proprietà
  • HasColumnName: specifica il nome dell colonna della tabella 

Per convenzione Entity Framework effettua la mappatura verso la tabella seguendo la convenzione EntityProperty_OwnedEntityProperty, ecco perchè è necessario indicare le due proprietà precedenti per customizzarne la mappatura.

Il risultato sarà la mappatura verso una tabella denominata Person che conterrà i campi definiti all’interno della classe Person e i campi presenti all’interno della proprietà di tipo Name.  Ad esempio, recuperando i dati della tabella Person tramite una query Select di Linq il risultato sarà quello di avere i campi della proprietà Name valorizzati automaticamente: 

owned types

A partire da Entity Framework Core 2.1 è inoltre possibile utilizzare la data annotation [Owned] :

Il framework consente anche di mappare gli owned types all’interno di una tabella specifica (e separata) utilizzando il metodo ToTable(…):

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.