Leggero. Continuano dei test a tempo perso con l'entity framework. Siccome volevo legare delle proprietà ad una tabella per vedere il comportamento dell'EF (lo chiamo così amichevolmente perché inizio ad avere confidenza con questa tecnologia), ho creato una struttura simile a questa:
L'entity framework crea il tutto in modo corretto:
Nella tabella colors sono presenti dei record così composta:
Id | Color |
1 | Black |
2 | White |
3 | Red |
Per inserire in Articles nuovi record con un colore corrispondente, mi basta scrivere il codice:
using (TestModel.TestEntities context = new TestModel.TestEntities())
{
var a = new TestModel.Articles();
a.Article = "Art " + DateTime.Now.ToString();
var c = context.Colors.Where(w => w.Color == "White").First();
a.Colors = c;
context.SaveChanges();
}
Tutto funziona bene. Con il profiler vedo che esegue una prima query per sapere l'id del colore che sarà poi utilizzato per l'inserimento nella tabella Articoles. A chiunque sarebbe venuto lo stesso sospetto che è venuto a me: nel caso caso di inserimento di più oggetti Articles, avendo richiedendo lo stesso colore, come si comporta l'EF?
Ipotizzando questo codice:
using (TestModel.TestEntities context = new TestModel.TestEntities())
{
string colore = "White";
var a = new TestModel.Articles();
a.Article = "Art " + DateTime.Now.ToString();
var c = context.Colors.Where(w => w.Color == colore).First();
a.Colors = c;
context.SaveChanges();
a = new TestModel.Articles();
a.Article = "Art2 " + DateTime.Now.ToString();
c = context.Colors.Where(w => w.Color == colore).First();
a.Colors = c;
context.SaveChanges();
}
E' per due volte richiesto il colore bianco. Avvio il codice, il tutto è inserito correttamente. Guardo con il profiler... delusione: esegue per ben due volte la query per ottenere l'id del colore. Una possibile soluzione? Crearsi una logica interna di cache... ok, ma un minimo di cache delle entità l'avrei gradita.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- C# e Net 6 in Kubernetes con Prometheus e Grafana, il 12 gennaio 2022 alle 21:58
- Snaturare Kubernetes evitando i custom container Docker, il 6 gennaio 2022 alle 19:40
- Provando Kaniko in Kubernetes come alternativa a Docker per la creazione di immagini, il 18 dicembre 2021 alle 20:11
- Divertissement con l'OpenID e Access Token, il 6 dicembre 2021 alle 20:05
- Operator per Kubernetes in C# e Net Core 6., il 28 novembre 2021 alle 19:44
- RBAC in Kubernetes verso gli operator, il 21 novembre 2021 alle 20:52