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

    .
  1. Aggiungi una proprietà denominata "Timestamp" all'entità nel modello di EF
  2. Imposta il tipo su binario
  3. Set nullable su false
  4. Set StoreGeneratedPattern su Computing
  5. 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 tipo timestamp. 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.

    Screenshot del mio <codice> Timestamp </ code> proprietà

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top