Gestione della concorrenza EF con attributo timestamp nel primo approccio modello
-
12-12-2019 - |
Domanda
Sto cercando di implementare la soluzione fornita in Gestione della concorrenza con il framework dell'entità in un'applicazione MVC ASP.NET .
L'articolo dice:
.Aggiunta di una proprietà di tracciamento all'entità del dipartimento
In modelli \ reparto.cs, aggiungi una proprietà di tracciamento:
.[Timestamp] public Byte[] Timestamp { get; set; }
L'attributo TimeStamp specifica che questa colonna sarà inclusa nella clausola WHERE dei comandi di aggiornamento ed elimina inviati al database.
Dato che sto usando un modello modello prima , ho seguito i passaggi da 1 a 5 delineati in Creazione di una colonna Timestamp con Quadro Entity
.
- Aggiungi una proprietà denominata "Timestamp" all'entità nel modello di EF
- Imposta il tipo su binario
- Set nullable su false
- Set StoreGeneratedPattern su Computing
- Set ConcurrencyMode to fisse
Quando aggiorno il mio codice dal modello di database, i modelli \ reparto.cs ora contiene
.public virtual byte[] Timestamp { get; set; }
Quindi ho usato la classe Metadati per specificare l'attributo TimeStamp:
.// Metadata for Department entity public class DepartmentMetadata { [Timestamp] public byte Timestamp { get; set; } }
Q1. Ho testato se il valore della colonna
Timestamp
sta cambiando in caso di modifiche di riga. Non è.Modifica 1 Il problema è stato causato perché il tipo di colonna di SQL Server era
binary
, dove avrebbe dovuto essere di tipotimestamp
. Modifica del tipo di dati Risolto il problema della colonna Timestamp che non viene aggiornato.Q2. Stavo cercando di modificare la stessa entità (usando "Apri in nuova scheda") per vedere se viene lanciato un
OptimisticConcurrencyException
. Non è. Che cosa sto facendo di sbagliato? Per favore aiutami a capire, grazie.
Soluzione
Il problema è stato causato perché avevo un oggetto ObjectContext per sessione HTTP e quindi aprendo una nuova scheda e test di test non causare un'eccezione di concorrenza.