ENTITY FRAMEWORK CORE

A COSA SERVE UN ORM COME ENTITY FRAMEWORK CORE

NET CORENel corso degli anni sono state introdotte nuove tecnologie come gli ORM ed Entity Framework Core è uno di essi. Non sono tecnologie alternative ad ADO.NET ma sono basate su ADO.NET, operando a un livello leggermente più alto. Ci consentono delle agevolazioni, come ad esempio lavorare con un modello ad oggetti, interrogando i nostri dati con query fortemente tipizzate. Gli ORM dato che lavorano ad un livello più alto introducono un piccolo costo di prestazione, se il nostro sito ha migliaia di utenti e non vogliamo introdurre costi di prestazioni, lavorare con ADO.NET è un’opzione più che valida.

ORM

Per il momento non diciamo nulla sull’oggetto rappresentato dai punti interrogativi, a differenza di ADO.NET in cui inseriamo una stringa da inviare come comando al database, e quindi soggetta ad errori di digitazione, con un ORM come si vede è praticamente impossibile commettere degli errori di digitazione, perché se sbagliamo a digitare qualcosa l’editor ce lo segnala immediatamente e non a Runtime in quanto si tratta di metodi e proprietà di C#.

Errore di digitazione

Tutto questo viene passato dal servizio applicativo al servizio infrastrutturale.

Servizio infrastrutturale

L’ORM è in grado di convertire tutto questo in una query SQL, perché del resto abbiamo pur sempre un database relazionale dall’altra parte.

Query sql

La query poi viene inviata al database che ci restituisce i dati in formato tabellare, trasformati dall’ORM in un grafo di oggetti.

Grafo oggetti

Poi tutto questo grafo di oggetti lo passa indietro al servizio applicativo. Un ORM riesce a fare il mapping tra il mondo relazionale e quello ad oggetti da qui la definizione di Object Relational Mapper (ORM).

Prestazioni

Vediamo quali sono i vantaggi e gli svantaggi.

Vantaggi

Prima di svelare i punti interrogativi, facciamo un po’ di pratica.

Linq

COMPRENDERE E USARE LE LAMBDA EXPRESSION

Il linguaggio C# è un linguaggio orientato agli oggetti, tuttavia il linguaggio stesso presenta dei tratti che sono puramente funzionali, come ad esempio le lambda expression. Esse sono essenzialmente funzioni che possiamo assegnare a una variabile proprio come assegneremo qualsiasi altro tipo di dato, un intero una stringa etc. Una lambda come qualsiasi altro oggetto può essere passata come argomento nell’invocare un’altra funzione.

Espressioni

La terza espressione contiene della logica e per favorirne il riutilizzo la possiamo incapsulare in una funzione/metodo.

Funzione

Vediamo l’utilizzo di una lambda expression.

lambda

L’espressione è un’assegnazione, tutto quello che sta a destra del simbolo uguale deve essere ricondotto a una Func<DateTime, bool>. Questo significa che la funzione accetta un DateTime come parametro (dob = data di nascita) e restituisce un valore booleano. A sinistra dell’operatore lambda => abbiamo l’elenco dei parametri che accetta la funzione, a destra il corpo della funzione. Viene anche chiamata funzione anonima perché come vedi non c’è traccia del suo nome. La possiamo anche ricondurre alla seguente espressione.

Lambda_2

Le parentesi tonde sono opzionali con un parametro ma diventano obbligatorie se abbiamo zero o più di un parametro. Vediamo un’altra funzione che introduce l’età legale per poter guidare e che può variare da stato a stato.

lambda_3

Questa funzione lambda accetta due parametri il primo di tipo DateTime il secondo un int e restituisce un valore booleano.

lambda_4

Si possono avere fino a otto parametri. E per funzioni che non restituiscono nulla? Ci sono le Action che sono lambda che restituiscono void.

Action

Da ricordare:

lambda_5

ESERCIZI CON LE LAMBDA EXPRESSION

Operazioni Lambda