Molto spesso capita di avere campi nel database che non sono necessari in un'entity. Ad esempio, la data di inserimento e l'utente che ha inserito un record nel database sono utili per scopi di logging, ma non hanno motivo di esistere in un'entity. In questi casi possiamo evitare di aggiungere queste proprietà nell'entity ma possiamo comunque mantenerne lo stato nel context e impostarne i valori. Le proprietà che non sono nell'entity ma sono nel context vengono definite Shadow Properties.
Queste proprietà possono essere mappate solo tramite codice nel metodo OnModelCreating della classe DbContext come mostrato nel prossimo esempio.
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Person>().Property<DateTime>("CreationDate"); modelBuilder.Entity<Person>().Property<string>("CreationUser"); }
Una volta mappate, possiamo fare riferimento a queste proprietà sia per impostarne un valore che per eseguire una query. Se vogliamo impostarne il valore dobbiamo sfruttare l'entry nel DbContext.
context .Entry(myBlog) .Property("CreationDate") .CurrentValue = DateTime.Now;
Se invece vogliamo ordinare la query per data inserimento, dobbiamo usare la sequente query Linq.
var people = context.People .OrderBy(p => EF.Property<DateTime>(p, "CreationDate"));
Il metodo EF.Property permette di usare la shadow property in una query Linq anche se la proprietà non è presente nell'entity.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Ottimizzazione dei block template in Angular 17
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Effettuare il binding di date in Blazor
Migrare una service connection a workload identity federation in Azure DevOps
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Utilizzare il trigger SQL con le Azure Function
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
I più letti di oggi
- Vuoi incontrare Bill Gates? Viaggia con ASPItalia.com!
- Customizzare il pager del DataGrid
- Stabilire un collegamento VPN tra una Web App e una Virtual Network
- Documentare ASP.NET Web API con Swagger
- Usare i servizi REST di BING per ottenere informazioni sulla posizione dell'utente
- Visual Studio 2005 CTP May