Question

J'essaie de mettre en œuvre la solution donnée dans Gestion de la concurrence avec Entity Framework dans une application ASP.NET MVC .

L'article dit :

Ajout d'une propriété de suivi à l'entité Department

Dans Models\Department.cs, ajoutez une propriété de suivi :

[Timestamp] 
public Byte[] Timestamp { get; set; }

L'attribut Timestamp précise que cette colonne sera incluse dans la clause Where des commandes Update et Delete envoyées à la base de données.

Puisque j'utilise un modèle d'abord approche, j'ai suivi les étapes 1 à 5 décrites dans Création d'une colonne Timestamp avec Entity Framework

  1. Ajoutez une propriété nommée « Timestamp » à l'entité dans le modèle EF
  2. Définir le type sur binaire
  3. Définir nullable sur false
  4. Définissez StoreGeneratedPattern sur Computed
  5. Définir ConcurrencyMode sur Fixe

Lorsque je mets à jour mon code à partir du modèle de base de données, Models\Department.cs contient désormais

    public virtual byte[] Timestamp
    {
        get;
        set;
    }

Ensuite, j'ai utilisé la classe de métadonnées pour spécifier l'attribut Timestamp :

// Metadata for Department entity
public class DepartmentMetadata
{
    [Timestamp]
    public byte Timestamp { get; set; }
}

T1. J'ai testé si la valeur du Timestamp la colonne change en cas de modifications de ligne.Ce n'est pas le cas.

MODIFIER 1 Le problème était dû au fait que le type de colonne SQL Server était binary, là où il aurait dû être du type timestamp.La modification du type de données a résolu le problème de la colonne Timestamp qui n'était pas mise à jour.

Q2. J'essayais de modifier la même entité (en utilisant "Ouvrir dans un nouvel onglet") pour voir si un OptimisticConcurrencyException Est lancé.Ce n'est pas le cas.Qu'est-ce que je fais mal?S'il vous plaît, aidez-moi à comprendre, merci.

Screenshot of my <code>Timestamp</code> property

Était-ce utile?

La solution

Le problème était dû au fait que j'avais un ObjectContext par session HTTP, et donc ouvrir un nouvel onglet et le tester PAS provoquer une exception de concurrence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top