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
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Creare form tipizzati con Angular
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Utilizzare politiche di resiliency con Azure Container App
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Inizializzare i container in Azure Container Apps
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Utilizzare Model as a Service su Microsoft Azure
Utilizzare gli snapshot con Azure File shares
Creazione di componenti personalizzati in React.js con Tailwind CSS
Gestire undefined e partial nelle reactive forms di Angular