La mia tabella Sections
(SQL Server) ha (int, identity)
come chiave primaria (int, identity)
e SortIndex
colonna (int) per scopi di ordinamento.Entity Framework non aggiorna il valore modificato da un trigger
Il database ha un trigger che imposta SortIndex := ID
a ogni INSERT
. Ovviamente voglio cambiare l'indice di ordinamento in seguito, scambiando i valori per due righe.
Accedo ai dati utilizzando Entity Framework, il tutto con l'applicazione Web MVC3.
Il problema è che Entity Framework non aggiorna il valore di SortIndex
dopo aver inserito un nuovo oggetto nella tabella. Inoltre memorizza nella cache tutti i dati, quindi la seguente chiamata per ottenere tutti gli oggetti da questa tabella fornirà anche il valore SortIndex
errato per questo oggetto.
Ho provato a cambiare StoreGeneratedPattern
per questa colonna in EDMX
. Questo sembra essere grande ed elegante ma non risolve il problema.
Se impostato su Identity
, fa sì che EF aggiorni correttamente il valore, ma diventa di sola lettura (eccezione generata quando si prova a cambiare). Impostarlo su Computed
è simile, ma invece di essere lanciati i valori non vengono scritti nel DB.
posso ricreare l'oggetto EF ogni volta che se ho bisogno di usarlo dopo aver inserito un oggetto, solo facendo:
DatabaseEntities db = new DatabaseEntities()
ma sembra brutto soluzione per me.
Qual è la soluzione a questo problema?
Ovviamente qualcosa, quello che non mi richiede di fare qualche azione dopo ogni insert
(e rischiare che sia dimenticato e inosservato) è preferito.
Eventuali duplicati: http://stackoverflow.com/questions/5445243/reload-field-value-modified-in-db-by-trigger-after-insert-update –
È simile, ma sembra che abbia un campo su cui non ha bisogno di scrivere. "Calcolato" dovrebbe andare bene per lui. Semplicemente non funziona a causa di qualche bug. – Arek