Utilizzare le shadow property in Entity Framework Core 1

di Stefano Mostarda, in LINQ, Entity Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi