Le proprietà ombra sono proprietà che non sono definite nella classe di entità .NET ma sono definite per quel tipo di entità nel modello EF Core. I valori e gli stati di questi attributi sono mantenuti esclusivamente nel monitoraggio dei cambiamenti. Le proprietà ombreggiate sono utili quando i dati in un database non devono essere esposti sul tipo di entità mappato. Il nucleo dell'Entity Framework introduce un nuovo tipo di attributo chiamato attributo "ombra", che non esiste in EF 6.x.
L'attributo ombra non c'è. .NET classi di entità. Invece, puoi configurarlo per un tipo specifico di entità nel modello dati dell'entità. Può essere configurato nel metodo OnModelCreating() della classe contesto.
Il diagramma seguente illustra l'attributo ombra.
Come mostrato nell'immagine sopra, l'attributo ombra non appartiene alla tua classe di entità. Pertanto, non puoi accedervi quando accedi ad altre proprietà di un'entità. Le proprietà ombreggiate possono essere configurate solo per tipi di entità durante la costruzione del modello dati dell'entità, e saranno anche mappate alle colonne del database. Il valore e lo stato della proprietà ombra sono mantenuti solo nel tracciatore dei cambiamenti.
Comprendiamo gli aspetti pratici delle proprietà dell'ombra. Supponiamo che dobbiamo mantenere le date di creazione e aggiornamento di ogni record nella tabella del database. Hai imparato come impostare le date di creazione e modifica per le entità in EF Core definendo le proprietà CreatedDate e UpdatedDate nella classe entità. Qui vedremo come ottenere lo stesso risultato usando le proprietà ombra invece di includere le proprietà ombra nella classe entità.
Considera le seguenti classi per entità studentesca.
La classe studentesca sopraGli attributi CreatedDate e UpdatedDate non sono inclusiper mantenere il tempo in cui è stato creato o aggiornato. Le configuriamo come proprietà ombra sull'entità Studente.
Definire le proprietà dell'ombra
Puoi usare il metodo OnModelCreating() per definire le proprietà ombra per i tipi di entità usando l'API Fluent.
La configurazione seguente configura due proprietà ombreggiate, CreatedDate e UpdatedDate, per l'entità Studente.
Come puoi vedere, il metodo Property() viene usato per configurare le proprietà ombra. Specifica il nome della proprietà ombra come stringa e il tipo come parametro generico. Se il nome specificato nel metodo Property() corrisponde al nome di una proprietà esistente, EF Core configurerà quella proprietà esistente come proprietà ombra invece di introdurne una nuova.
Proprietà ombra nel database
Una volta definite le proprietà dell'ombra, dobbiamo aggiornare lo schema del database poiché le proprietà dell'ombra saranno mappate alle colonne corrispondenti del database.
Per farlo, aggiungi una migrazione del database nella console Package Manager di Visual Studio utilizzando il seguente comando.
La tabella Student includerà ora due colonne, CreatedDate e UpdatedDate in SQL Server, come mostrato di seguito.
Quindi, anche se non includiamo queste proprietà nella classe Student e le configuriamo come proprietà ombra, il database avrà le colonne corrispondenti.
Accedi alla proprietà ombra
Puoi usare il metodo Property() per ottenere o impostare il valore della proprietà ombra in EntityEntry. Il seguente codice accede al valore della proprietà ombra.
Tuttavia, nel nostro scenario, vogliamo impostare automaticamente i valori su queste proprietà ombra nel metodo SaveChanges(), così da non doverli impostare manualmente su ogni oggetto entità. Quindi, sovrascrivi il metodo SaveChanges() nella classe contest come mostrato qui sotto.
Questo imposterà automaticamente i valori per le proprietà ombra CreatedDate e UpdatedData.
Ora, esegui il seguente codice e controlla i record nel database.
Il codice sopra inserirà i seguenti record in CreatedDate e UpdatedDate for Students.
Quindi, configurando le proprietà ombra, non dobbiamo includerle nella classe entità.
Configura le proprietà delle ombre su tutte le entità
Invece di configurare manualmente le proprietà delle ombre su tutte le entità contemporaneamente, puoi configurarle manualmente.
Ad esempio, possiamo configurare tutte le entità di CreatedDate e UpdatedDate l'ultima volta, come mostrato nell'immagine seguente.
Quando usare la proprietà ombra?
L'attributo ombra può essere usato in due situazioni:
Quando non vuoi esporre colonne del database su entità mappate, come nello scenario discusso sopra. Quando non vuoi esporre gli attributi della chiave esterna ma vuoi solo usare gli attributi di navigazione per gestire le relazioni. La proprietà della chiave esterna sarà una proprietà ombra e sarà mappata alla colonna del database, ma non sarà esposta come proprietà dell'entità. (In EF Core, se non si definisce una proprietà chiave estrana in una classe di entità, verrà automaticamente generata una proprietà ombra per questo.) Non è necessario configurare manualmente le proprietà della chiave esterna. )
Risorse:
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
|