Entity:
Codice:
// Step 1
var coll2 = (from c in context.Men.Include("Women")
select c).First();
//
// Visualizza item;
//----------------------------------------------------------------
//
// Step 2
//
coll2.Age++;
coll2.Women.Age++;
//
// Visualizza item;
//-----------------------------------------------------------------
//
// Step 3
//
var coll3 = from c in context.Men.Include("Women")
select c;
foreach (var item in coll3)
{
// Visualizza item;
}
Nel primo caso come age della prima entity e della seconda, viene visualizzato il contenuto iniziale della tabella (viene eseguita la query visibile grazie al profiler):
1 e 1
Al secondo step viene visualizzato:
2 e 2
Domanda finale... Che cosa viene visualizzato allo step 3? Do un aiuto, con il profiler è visibile la query di select delle due entity.
Dunque?
Qual è la risposta?
Sto aspettando...
Be', si potrebbe pensare che visualizzi ancora 1 e 1 visto che esegue richiede le due tabella al database che ritornano i valori iniziali (proprio ciò che avviene), ma invece viene visualizzato:
2 e 2!!!
Ma perché esegue la query se alla finfine prende ancora i dati aggiornati in precedenza?
Un attimo di pensieri alterni...
Giungo alla conclusione che esegue queste query con controllare la consistenza dei dati, per vedere se eventualmente il record sul db è stato modificato da qualcosa d'altro. Anzi, oso di più, mi convinco che sia questo il motivo.
Avvio il profiler e l'enterprise manager.
Eseguo i due step, blocco, modifico il record esternamente, e eseguo l'ultimo passo. La query viene eseguita e presi i dati... ma non accade nulla!!! Nulla di nulla!
Non mi arrendo. Modifico le proprietà delle due entity. Imposto Age come Concurrency Mode a Fixed. Riprovo. Non cambia nulla... uff... Per avere aggiornati i dati dobbiamo forzare la cosa:
//
// Step 3
//
var coll3 = from c in context.Men.Include("Women")
select c;
foreach (var item in coll3)
{
context.Refresh(System.Data.Objects.RefreshMode.StoreWins, item);
context.Refresh(System.Data.Objects.RefreshMode.StoreWins, item.Women);
// Visualizzo dati
}
Buono a sapersi, ma perché la query non la fa in questo caso e solo questo?
(*) La parola strano, che vuol dì? Qualcosa che non è normale, qualcosa al di fuori di ogni schema? Ma in sé, che significa? E' una prola senza significato. Cos'è strano? Ciò che fuori dal normale senso civico e comportamentale? Chi ha creato l'Entity Framework saprà dirmi il perché di questo comportamento che riterrà normale... dunque è strano ciò che penso io! Strano è una parola inutile, da cancellare. Che parola odiosa.
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