Question

J'utilise JMeter pour tester mon application Web. et mon cas de test est d'ajouter un enregistrement dans la base de données. puis je règle le " nombre d'utilisateurs de threads " à 20, cela signifie qu’il simulera 20 utilisateurs travaillant en même temps. et puis je lance le cas de test. Mais finalement, j’ai trouvé que le système n’avait pas créé 20 enregistrements dans la base de données, mais simplement créé 13 enregistrements dans la base de données.

Je veux savoir pourquoi c'est arrivé? Est-il possible que, dans mon application Web, je n’ai pas ajouté de message "synchronisé"? en face de la méthode add records? J'ai utilisé linq, si deux utilisateurs postent une demande pour créer un enregistrement sur le serveur en même temps, que se passera-t-il? Créez simplement un enregistrement ou pouvez créer avec succès deux enregistrements ou inconnu?

Voici l'exemple de code permettant de créer un enregistrement dans la base de données:

       public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish)
    {
        try
        {
            Entities.EventGroup db;
            if (id == 0)
            {
                db = new Entities.EventGroup();
                db.CreatedBy = e.CreatedBy;
                db.CreateDatetime = DateTime.Now;
                db.Status = true;
            }
            else
            {
                db = this.GetEventGroup(id);
            }

            db.NameCN = e.NameCN;
            db.NameEN = e.NameEN;
            db.NameZH = e.NameZH;
            db.NamePT = e.NamePT;
            db.DisplayOrder = GetGroupMaxDisplayOrder() + 1;

            if (setpublish == null)
            {
                db.PublishStatus = false;
                db.PublishDatetime = null;
                db.UpdateDatetime = DateTime.Now;
                db.UpdatedBy = e.UpdatedBy;
            }

            if (id == 0)
                dataContext.AddToEventGroupSet(db);

            dataContext.SaveChanges();

            return db.Id;
        }
        catch (Exception ex)
        {
            log.Error(ex.Message, ex);
            throw ex;
        }
    }
Était-ce utile?

La solution

la base de données elle-même devrait être conforme à la norme ACID. Je doute donc que le problème vienne de la base de données en ce qui concerne la synchronisation. Si vous insérez un nouvel enregistrement et que cet enregistrement est associé à quelque chose comme un entier auto-incrémenté, la base de données ne va pas écraser à moins que vous ne lui demandiez de mettre à jour par cet identifiant plutôt que d'insérer un nouvel enregistrement. mais puisque vous n’écrivez pas le code SQL, qui sait vraiment ce que vous demandez à la base de données de faire.

Je suggérerais de supprimer linq de l'équation et de l'écrire manuellement. ce que vous testez semble être un très simple & ups; upsert " opération.

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